2012-10-18 127 views
0

我有一個應用程序,生成許多arraylist,存儲在一個集合。所有的數組列表都會有一個共同的元素。Java很多arraylist - 尋找共同元素

我需要確定哪些是常見因素。我用兩個列表管理了這個列表,並使用了List.contains(...),但需要將其擴展到很多列表。

我該怎麼做?

回答

1

使用,在每一個ArrayList中的獨特元素映射到其頻率(即,即使有一個元素的多次出現在同一個ArrayList中它有一個哈希表成爲增量只有一次)。遍歷散列表,直到值等於arraylist的數量。相應的鍵是我們正在尋找的元素。

+0

我似乎已經這樣解決了,謝謝。 – user1277546

0

使用retainAll()以便在每個步驟中,您將有名單

list1.retainAll(list2); 
list1.retainAll(list3); 

所以這樣list1將所有元素的交集交集。現在,如果通用元素將被複制,那麼您需要將最終列表添加到Set和完成。

2

如果你retainAll()所有List的你將最終得到在該集合中的所有常見元素。

Set set = new HashSet(); 
for (List list : yourLists) 
{ 
    set.addAll(list); 
} 
for (List list : yourLists) 
{ 
    set.retainAll(list); 
} 

這可以幾乎平凡被優化,以僅遍歷列表一次(並且使用最多堆空間等於所有現有列表第一列表的附加大小的大小),但對於說明目的這個版本比較好...

乾杯,

+0

我在看這個選項,但由於集合是無序的,我如何確定最不常用的元素(即找到最低的所有列表)? – user1277546

+0

根據定義,集合中的所有元素將在所有列表中出現相同的次數(即列表計數)。如果即使其中一個元素出現在比其他元素少的列表中,它也不會被包含在最終集合中,對嗎? –