Java:はありますタイミングよくタップ、または、XORとセット?
-
23-08-2019 - |
質問
る場合、または、たいと思った返す新しいセットのいずれかを含む:
- すべての要素をそれぞれが共通し
- すべての要素を総合の各セット(または)
- すべての要素を独自のセットです。(XOR).
は簡単に既存の方法。
編集: 間違った用語ですよね。
解決
2セットのオブジェクトとB
と仮定するとAND(二組の交点)
a.retainAll(b);
OR(二組の組合)
a.addAll(b);
XOR いずれかの独自のループをロールます:
foreach item
if(a.contains(item) and !b.contains(item) || (!a.contains(item) and b.contains(item)))
c.add(item)
または次の操作を行います。
c.addAll(a);
c.addAll(b);
a.retainAll(b); //a now has the intersection of a and b
c.removeAll(a);
他のヒント
あなたは<のhref = "https://github.com/google/guava/blob/master/guava/src/com/google/common/collect/Sets.java" のrel = "nofollowをnoreferrer" を使用することができます>グーグル・コレクションは、メソッドの交差点()組合()を有し、対称差()。
クラスを設定します。Sets.intersection(set1, set2);
Sets.union(set1, set2);
SetView view = Sets.intersection(Sets.union(set1, set2), set3);
Set result = view.copyInto(new HashSet());
@Milhousと
チェックをセットします。ご利用の場合 addAllができます。ご利用の場合 retainAllを得ることができます。あまりないと思います 知のXor.
そうでしたかの様なセット s1
や s2
なにができることをXOR:
- コピーの設定
s1
へs3
s1.removeAll(s2);
(s1現在までにすべての要素がないs2)s2.removeAll(s3);
(s2現在までにすべての要素がないs3=旧s1)s1.addAll(s2);
(s1現在までにeu上記のいずれかのセット)
の編集:セットのドキュメントからの
。 指定されたコレクションもセットである場合、その値は、二組の組合であるように、...、のaddAll操作が効果的にこのセットを変更します。
指定されたコレクションもセットである場合、その値は、2つのセットの共通部分であるように、...、この操作は効果的にこのセットを修正します。
私はジャカルタ共通コレクションAPIは、労働組合、交差点などをサポートしていることをかなり確信しています。
GoogleのコレクションAPIは、同様にしなかった場合、私は驚かれることと思います。
所属していません StackOverflow