Comment calculer l'intersection de deux ensembles? [dupliquer]

possibilité de dupliquer:

trouver efficacement l'intersection d'un nombre variable d'ensembles de cordes

Dire deux Hashset, comment calculer l'intersection d'entre eux?

Set<String> s1 = new HashSet<String>();

Set<String> s2 = new HashSet<String>();

S1 INT S2 ?
148
demandé sur Ondra Žižka 2012-01-16 19:23:40

2 réponses

utiliser la retainAll() méthode de Set :

Set<String> s1;
Set<String> s2;
s1.retainAll(s2); // s1 now contains only elements in both sets

si vous voulez préserver les ensembles, créer un nouveau ensemble pour tenir l'intersection:

Set<String> intersection = new HashSet<String>(s1); // use the copy constructor
intersection.retainAll(s2);

le javadoc de retainAll() dit que c'est exactement ce que vous voulez:

ne Retient que les éléments de cet ensemble qui sont contenus dans la collecte spécifiée (optionnel). En d'autres termes, supprime de l'ensemble de ses éléments qui ne sont pas contenus dans la collection spécifiée. Si la collection spécifiée est aussi un ensemble, cette opération modifie effectivement cet ensemble de sorte que sa valeur est intersection des deux ensembles.

302
répondu Bohemian 2013-08-23 04:19:23

Oui, il y a retainAll check out ce

Set<Type> intersection = new HashSet<Type>(s1);
intersection.retainAll(s2);
35
répondu Emmanuel N 2017-05-19 04:34:17