java texte Ajouter des éléments de deux ensembles




manuel css (4)

Comment puis-je ajouter des éléments de deux ensembles?

If there's a set one (1, 3, 6, 8)
And a set two (2, 4, 6, 8)

Comment puis-je les éléments de ces deux ensemble?

Output should be (1, 2, 3, 4, 6, 8)

Voici ce que j'ai essayé:

Set<Integer> one = new HashSet();
one.add(1);
one.add(3);
// and so on
Set<Integer> two = new HashSet();
two.add(2);
two.add(4);
// and so on
Set<Integer> newSet = new HashSet();
newSet.add(one);
newSet.add(two);

return newSet;

Et cela ne fonctionne pas, car la méthode add ne fonctionne que pour un seul entier, pas une collection d'entiers. Y at-il une méthode où je peux ajouter deux ensembles ensemble?

Je dois aussi retourner l'ensemble. Comment je fais ça?


Vous ne voulez pas un ensemble. Comme vous l'avez découvert, ils n'ont pas d'éléments en double, par définition. Vous cherchez un Multiset (en fait, un SortedMultiset par son apparence), également connu sous le nom de Bag . Java n'en a pas d'out-of-the-box, mais il existe des implémentations open source disponibles, par exemple, Google .

EDIT: Aussi, vous voulez faire setOne.addAll(setTwo) , pas un élément à la fois, comme indiqué ci-dessus, mais c'est le problème secondaire.


Utilisez Set.addAll()

Set<Integer> one = new HashSet<Integer>();
Set<Integer> two = new HashSet<Integer>();
Set<Integer> newSet = new HashSet<Integer>(one);
newSet.addAll(two);

En outre, vous devez taper vos constructeurs (comme ci-dessus).

Pour en faire une méthode, essayez ceci:

public static Set<Integer> addTwoSets(Set<Integer> one, Set<Integer> two) {
    Set<Integer> newSet = new HashSet<Integer>(one);
    newSet.addAll(two);
    return newSet;
}

En fait, allons-y complètement ... Voici une méthode qui prendra n'importe quel nombre de collections de n'importe quel type qui étend le type désiré, et les fusionne en un seul ensemble:

public static <T> Set<T> merge(Collection<? extends T>... collections) {
    Set<T> newSet = new HashSet<T>();
    for (Collection<? extends T> collection : collections)
        newSet.addAll(collection);
    return newSet;
}

Comme Bohemian l'a mentionné , la meilleure réponse est d'utiliser Set.addAll (). Gardez juste à l'esprit que, si cela ne vous dérange pas d'écraser un de vos ensembles, il est plus efficace (du moins du point de vue du développeur: P) d'ajouter un ensemble directement à un autre ensemble:

one.addAll(two);

Ou utilisez alternativement une ArrayList triée:

ArrayList<Integer> list = new ArrayList<Integer>(one);
list.addAll(two);
Collections.sort(list);




set