Question

C'est, si j'avais deux ensembles ou plus, et je voulais retourner un nouvel ensemble contenant soit:

  1. Tous les éléments de chaque ensemble a en commun (ET).
  2. Tous du total des éléments de chaque ensemble (OR).
  3. Tous les éléments propres à chaque ensemble. (XOR).

Y at-il un moyen facile, préexistant à le faire?

Modifier: est la mauvaise terminologie, est pas

Était-ce utile?

La solution

En supposant 2 Définir des objets a et b

ET (intersection de deux ensembles)

a.retainAll(b); 

OU (union de deux ensembles)

a.addAll(b);

XOR soit rouler votre propre boucle:

foreach item
if(a.contains(item) and !b.contains(item) ||  (!a.contains(item) and b.contains(item)))
 c.add(item)

ou faire ceci:

c.addAll(a); 
c.addAll(b);
a.retainAll(b); //a now has the intersection of a and b
c.removeAll(a); 

Voir la Set documentation et ce . Pour en savoir plus.

Autres conseils

Vous pouvez utiliser le Google-Collections Définit la classe qui a l'intersection des méthodes () union () et symmetricDifference ().

Sets.intersection(set1, set2);
Sets.union(set1, set2);

SetView view = Sets.intersection(Sets.union(set1, set2), set3);
Set result = view.copyInto(new HashSet());

@Milhous dit:

  

vérifier l'api ensembles. si tu utilises   addAll vous pouvez obtenir ou. Si tu utilises   retainAll vous pouvez obtenir le et. Je ne   savoir sur le Xor.

Il semble que si vous aviez des ensembles s1 et s2 vous pouvez faire pour obtenir XOR:

  1. copier le s1 set à s3
  2. s1.removeAll(s2); (s1 contient maintenant tous les éléments non s2)
  3. s2.removeAll(s3); (s2 contient maintenant tous les éléments non s3 = l'ancien s1)
  4. s1.addAll(s2); (s1 contient maintenant l'union des deux ensembles ci-dessus)

vérifier les jeux api . si vous utilisez addAll vous pouvez obtenir ou. Si vous utilisez retainAll vous pouvez obtenir le et. Je ne sais pas sur le Xor.

Edit:. de la documentation set

... Si la collection spécifiée est également un ensemble, l'opération de addAll modifie efficacement cet ensemble de sorte que sa valeur est l'union des deux ensembles.

.... Si la collection spécifiée est également un ensemble, cette opération modifie efficacement cet ensemble de sorte que sa valeur est l'intersection des deux ensembles.

Je suis assez sûr que l'API de Jakarta Collections communes soutient les syndicats, les intersections etc.

Je serais étonné si l'API Collections Google n'a pas aussi bien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top