3

2 つの Collection オブジェクトから一意の値を取得したいと考えています。どうすればいいですか?例: 2 つ取りましょうArrayLists:

List bag1 = new ArrayList(); 
List bag2 = new ArrayList();

bag1.add("1");
bag1.add("2");
bag1.add("3");
bag1.add("7");
bag1.add("8");
bag1.add("9");

bag2.add("4");
bag2.add("5");
bag2.add("6");
bag2.add("7");
bag2.add("8");
bag2.add("9");

--> 1,2,3 frombag1および 4,5,6 fromのような結果を得る必要がありますbag2

助けていただけませんか?

4

5 に答える 5

1

2つのこと:

  1. org.apache.commons.collections.CollectionUtils.disjunction(コレクション a、コレクション b); を使用します。
  2. Bag は、リストに最適な変数名ではありません。:)
于 2012-07-28T04:17:38.040 に答える
0

やってみました...

bag1.removeAll(bag2);

bag1とbag2をそのままにしておきたい場合は、Set変数を使用して、のすべての値をに渡してbag1から、次のようSetにチェックできます。contains()

    Set set = new HashSet();
    set.addAll(bag2);
    for(Object o: bag1){
        if(!set.contains(o)){
            // Do whatever you want with bag1 elements
        }
    }
    set.clear();

    set.addAll(bag1);
    for(Object o: bag2){
        if(!set.contains(o)){
            // Do whatever you want with bag2 elements
        }
    }
于 2012-07-28T04:50:03.283 に答える
0

Set インターフェイスremoveAllで define メソッドを使用します。

Set intersect = new TreeSet(bag1);  
intersect.removeAll(bag2);  
List unique1 = Arrays.asList(intersect);  

intersect = new TreeSet(bag2);  
intersect.removeAll(bag1);  
List unique2 = Arrays.asList(intersect);  
于 2012-07-28T05:30:26.533 に答える
0

代わりに Sets を見てください。Java Collection には、これに対処するいくつかのクラスがあります。アイデアは、2 つのコレクションのセットの違いだけで、答えが得られるということです。

于 2012-07-28T04:14:41.523 に答える
0

「セット」を使用してデータを保存します。そうすれば、要素をセットに追加するときに、コレクションに一意の要素が含まれます。

こちらの javadoc を参照してください: http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Set.html

于 2012-07-28T04:14:44.447 に答える