2012-07-28 104 views
3

我想從兩個集合對象中獲取唯一值。我會怎麼做? 例子:讓我們採取兩種ArrayLists從兩個Java集合對象中獲取兩個唯一值

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"); 

我需要得到這樣的結果 - 從bag2

> 1,2,3從bag1 4,5,6能否請你幫我出來嗎?

回答

0

你應該看看集合。 Java Collection有幾個類來處理這個問題。這個想法是你可以只是兩個集合之間的差異,你會得到你的答案。

+0

謝謝答案。然而,一位採訪者問我如何使用ArrayList對象來完成它。欣賞你的時間來看看這個問題。 – Sriks 2012-07-28 04:31:27

+0

如果它是一個面試官,你不應該做你的盡職調查,而不是直接要求答案? – 2012-07-28 04:53:56

1

兩件事情:

  1. 使用org.apache.commons.collections.CollectionUtils.disjunction(集合A,集合B);
  2. Bag不是列表的最佳變量名稱。 :)
0

你試過......

bag1.removeAll(bag2); 

如果你想保持BAG1和BAG2完好你可以使用一組變量和傳遞的bag1所有的值到Set,然後檢查像

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 
     } 
    } 
0

使用removeAll方法定義在Set interface

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);