20

つまり、2 つ以上のセットがあり、次のいずれかを含む新しいセットを返したい場合です。

  1. 各セットに共通するすべての要素 (AND)。
  2. 各セットのすべての要素の合計 (OR)。
  3. 各セットに固有のすべての要素。(XOR)。

それを行う簡単な既存の方法はありますか?

編集: それは間違った用語ですね。

4

5 に答える 5

34

2 Set オブジェクト a と 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); 

セットのドキュメントとこのページを参照してください。多くのための。

于 2008-12-26T17:03:20.577 に答える
9

Intersection()、union()、およびsymmetricDifference()メソッドを持つGoogle-Collections Setsクラスを使用できます。

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

SetView view = Sets.intersection(Sets.union(set1, set2), set3);
Set result = view.copyInto(new HashSet());
于 2009-12-28T19:28:48.193 に答える
3

@Milhous 氏は次のように述べています。

セットAPIをチェックしてください。addAll を使用すると、または取得できます。keepAll を使用すると、and を取得できます。Xorについては知りません。

s1セットがあり、s2これを実行して XOR を取得できる場合のようです。

  1. s1セットをコピーしますs3
  2. s1.removeAll(s2); (s1 には、s2 にないすべての要素が含まれるようになりました)
  3. s2.removeAll(s3); (s2 には、s3 にないすべての要素が含まれるようになりました = 古い s1)
  4. s1.addAll(s2); (s1 には、上記の 2 つのセットの和集合が含まれています)
于 2008-12-26T17:02:55.337 に答える
1

セットAPIをチェックしてください。addAll を使用すると、または取得できます。keepAll を使用すると、and を取得できます。Xorについては知りません。

編集:セットのドキュメントから。

...指定されたコレクションもセットである場合、addAll 操作はこのセットを効果的に変更し、その値が 2 つのセットの結合になるようにします。

....指定されたコレクションもセットである場合、この操作はこのセットを効果的に変更し、その値が 2 つのセットの交差になるようにします。

于 2008-12-26T16:48:08.097 に答える
0

Jakarta Common Collections API がユニオン、交差点などをサポートしていると確信しています。

Google Collections API が同様に機能しなかったとしたら、私は驚くでしょう。

于 2008-12-27T22:59:19.627 に答える