我有一个应用程序可以生成许多存储在集合中的arraylists。所有的arraylists总会有一个共同的元素。
我需要解决哪个是常见元素。我使用两个列表并使用List.contains(...)
进行了管理,但需要将其扩展到多个列表。
我该怎么做?
答案 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。