web-dev-qa-db-fra.com

Comment calculer l'intersection de deux ensembles?

Duplicate possible:
Recherche efficace de l'intersection d'un nombre variable de jeux de chaînes

Dis, as deux Hashset, comment calculer leur intersection?

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

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

S1 INT S2 ?
182
user496949

Utilisez la méthode retainAll() de Set :

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

Si vous souhaitez conserver les jeux, créez un jeu new pour contenir l'intersection:

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

Le javadoc de retainAll() indique que c'est exactement ce que vous voulez:

Conserve uniquement les éléments de cet ensemble contenus dans la collection spécifiée (opération facultative). En d'autres termes, supprime de cet ensemble tous les éléments qui ne sont pas contenus dans la collection spécifiée. Si la collection spécifiée est également un ensemble, cette opération modifie effectivement cet ensemble afin que sa valeur soit l'intersection des deux ensembles.

361
Bohemian

Oui, il y a retainAll check out this

Set<Type> intersection = new HashSet<Type>(s1);
intersection.retainAll(s2);
40
Emmanuel N