Java许多arraylists - 找到共同的元素

时间:2012-10-18 18:32:26

标签: java search arraylist

我有一个应用程序可以生成许多存储在集合中的arraylists。所有的arraylists总会有一个共同的元素。

我需要解决哪个是常见元素。我使用两个列表并使用List.contains(...)进行了管理,但需要将其扩展到多个列表。

我该怎么做?

3 个答案:

答案 0 :(得分:2)

如果您retainAll() List Set Set set = new HashSet(); for ( List list : yourLists ) { set.addAll( list ); } for ( List list : yourLists ) { set.retainAll( list ); } ,您将最终获得该集合中的所有常见元素。

{{1}}

这几乎可以简单地优化为仅遍历列表一次(并且使用的堆空间等于所有现有列表的大小加上 第一个的额外大小> list),但为了说明的目的,这个版本更好......

干杯,

答案 1 :(得分:1)

使用哈希表将每个arraylist中的唯一元素映射到其频率(即使在同一个arraylist中多次出现一个元素,它只需要增加一次)。迭代哈希表,直到该值等于arraylists的数量。相应的键是我们正在寻找的元素。

答案 2 :(得分:0)

使用retainAll(),以便在每一步都有列表的交集

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

所以这种方式list1将是所有元素的交集。现在,如果公共元素将被复制,那么您需要将最终列表添加到Set and done。