Java: C'è un modo rapido facile da AND, OR, XOR o insieme set?
-
23-08-2019 - |
Domanda
Cioè, se ho avuto due o più set, e ho voluto tornare un nuovo insieme contenente o:
- Tutti gli elementi ciascuna serie ha in comune (E).
- tutti gli elementi totale di ciascuna serie (OR).
- Tutti gli elementi unici per ogni set. (XOR).
C'è un modo facile e preesistente di farlo?
Modifica:? Questa è la terminologia sbagliata, non è vero
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:
- copiare il set
s1
as3
-
s1.removeAll(s2);
(S1 ora contiene tutti gli elementi non in s2) -
s2.removeAll(s3);
(S2 ora contiene tutti gli elementi non in S3 = vecchio S1) -
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.