Domanda

Cioè, se ho avuto due o più set, e ho voluto tornare un nuovo insieme contenente o:

  1. Tutti gli elementi ciascuna serie ha in comune (E).
  2. tutti gli elementi totale di ciascuna serie (OR).
  3. Tutti gli elementi unici per ogni set. (XOR).

C'è un modo facile e preesistente di farlo?

Modifica:? Questa è la terminologia sbagliata, non è vero

È stato utile?

Soluzione

Supponendo 2 Set oggetti a e b

E (intersezione di due insiemi)

a.retainAll(b); 

OR (unione di due set)

a.addAll(b);

XOR o rotolare il proprio ciclo:

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

o fare questo:

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

Vedere la documentazione e questo pagina . Per di più.

Altri suggerimenti

È possibile utilizzare il Google-Collezioni Imposta classe che ha l'intersezione metodi () unione () e differenza simmetrica ().

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

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

@Milhous ha detto:

  

controllare le api set. se si utilizza   addall si può ottenere o. Se si utilizza   retainAll è possibile ottenere il e. io non   conoscere la XOR.

Sembra come se si fosse set s1 e s2 si potrebbe fare questo per ottenere XOR:

  1. copiare il set s1 a s3
  2. s1.removeAll(s2); (S1 ora contiene tutti gli elementi non in s2)
  3. s2.removeAll(s3); (S2 ora contiene tutti gli elementi non in S3 = vecchio S1)
  4. s1.addAll(s2); (S1 contiene ora l'unione di questi due set)

controllare i set api . se si utilizza addAll si può ottenere o. Se si utilizza retainAll è possibile ottenere il e. Non so circa lo XOR.

Modifica:. dalla documentazione set

... Se la raccolta è specificato anche un set, l'operazione addAll modifica in modo efficace questo insieme in modo che il suo valore è l'unione dei due insiemi.

.... Se la raccolta specificato anche un set, questa operazione modifica efficacemente questo insieme in modo che il suo valore è l'intersezione dei due insiemi.

Sono abbastanza sicuro che Jakarta comuni Collezioni API supporta le unioni, intersezioni ecc.

Sarei stupito se l'API di Google non ha Collezioni pure.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top