2014-04-02 20 views
1

也就是說,如果我有下:是否有任何方法創建另一個具有兩個ArrayList的共同值的ArrayList?

ArrayList<Integer> array1 = new ArrayList<Integer>(); 
ArrayList<Integer> array2 = new ArrayList<Integer>(); 

array1 ==> (1,11,12,13,14,15,16,17,18) 
array2 ==> (1,17,18) 

是否有創建一個具有共同價值觀的另一個ArrayList的任何方法?

+0

如果兩個列表總是排序(如您的示例中所示),則可以使用更高效的解決方案。這總是如此嗎? –

回答

8

使用此方法ArrayList

ArrayList#retainAll(java.util.Collection)

所以,把這個在你的代碼。

array1.retainAll(array2); 

例==>

 List<Integer> first_list = new ArrayList<Integer>(); 

     first_list.add(10); 
     first_list.add(20); 
     first_list.add(30); 

     List<Integer> second_list = new ArrayList<Integer>(); 
     second_list.add(40); 
     second_list.add(20); 
     second_list.add(30); 

     List<Integer> third_list = new ArrayList<Integer>(second_list); 
third_list.retainAll(first_list); 

     for (int i = 0; i < third_list.size(); i++) { 
      System.out.println("===>" + third_list.get(i)); 
     } 

最後,我們可以看到這裏的是,third_list由具有列表first_list和second_list之間唯一的共同的元件。

+2

+1。 Didnt知道'retainAll'。 – xyz

+0

沒問題的老兄!有時它發生在所有的,共享的東西和知識都是關於stackoverflow :) –

+0

請注意,這修改'array1'。如果你想保持'array1'和'array2'不被修改,但是產生只包含共享項目的第三個數組,'retainAll'不會有幫助。 –

1

只是遍歷一個列表,並檢查是否值在另一個列表存在

ArrayList<Integer> common = new ArrayList<Integer>(); 
for(int i: array1){ 
    if(array2.contains(i)){ 
    common.add(i); 
    } 
} 
1

試試這個,

ArrayList<Integer> result = new ArrayList<Integer>(); 
for (Integer value : array1) 
{ 
    if (array2.contains(value)) 
    { 
     result.add(value); 
    } 
} 
+0

沒有必要,請看[this](http://stackoverflow.com/a/22808207/2959259) – Astrobleme

+0

@ambigram_maker謝謝... – newuser

0

你可以使用Apache的百科全書庫,並使用ListUtils.intersection(list1,list2)方法。

相關問題