我有一個應用程序,生成許多arraylist,存儲在一個集合。所有的數組列表都會有一個共同的元素。Java很多arraylist - 尋找共同元素
我需要確定哪些是常見因素。我用兩個列表管理了這個列表,並使用了List.contains(...)
,但需要將其擴展到很多列表。
我該怎麼做?
我有一個應用程序,生成許多arraylist,存儲在一個集合。所有的數組列表都會有一個共同的元素。Java很多arraylist - 尋找共同元素
我需要確定哪些是常見因素。我用兩個列表管理了這個列表,並使用了List.contains(...)
,但需要將其擴展到很多列表。
我該怎麼做?
使用,在每一個ArrayList中的獨特元素映射到其頻率(即,即使有一個元素的多次出現在同一個ArrayList中它有一個哈希表成爲增量只有一次)。遍歷散列表,直到值等於arraylist的數量。相應的鍵是我們正在尋找的元素。
使用retainAll()以便在每個步驟中,您將有名單
list1.retainAll(list2);
list1.retainAll(list3);
所以這樣list1
將所有元素的交集交集。現在,如果通用元素將被複制,那麼您需要將最終列表添加到Set和完成。
如果你retainAll()
所有List
的你將最終得到在該集合中的所有常見元素。
Set set = new HashSet();
for (List list : yourLists)
{
set.addAll(list);
}
for (List list : yourLists)
{
set.retainAll(list);
}
這可以幾乎平凡被優化,以僅遍歷列表一次(並且使用最多堆空間等於所有現有列表加的第一列表的附加大小的大小),但對於說明目的這個版本比較好...
乾杯,
我在看這個選項,但由於集合是無序的,我如何確定最不常用的元素(即找到最低的所有列表)? – user1277546
根據定義,集合中的所有元素將在所有列表中出現相同的次數(即列表計數)。如果即使其中一個元素出現在比其他元素少的列表中,它也不會被包含在最終集合中,對嗎? –
我似乎已經這樣解決了,謝謝。 – user1277546