[英]Java many arraylists - find common element
我有一个生成许多存储在集合中的数组列表的应用程序。 所有的arraylist将始终具有一个公共元素。
我需要弄清楚哪个是常见元素。 我用两个列表并使用List.contains(...)
来管理它,但是需要将其缩放到许多列表。
我怎样才能做到这一点?
如果您Set
所有List
retainAll()
All,则最终将获得该集中所有公共元素。
Set set = new HashSet();
for ( List list : yourLists )
{
set.addAll( list );
}
for ( List list : yourLists )
{
set.retainAll( list );
}
几乎可以对其进行优化,使其仅遍历一次列表(并消耗等于所有现有列表大小加上 第一个列表的其他大小的堆空间),但是出于说明目的,此版本更好...
干杯,
使用哈希表将每个数组列表中的唯一元素映射到其频率(即,即使在同一数组列表中出现多次元素,也只需将其递增一次)。 遍历哈希表,直到该值等于数组列表的数量。 相应的键是我们正在寻找的元素。
使用retainAll(),以便在每一步中都有列表的交集
list1.retainAll(list2);
list1.retainAll(list3);
因此, list1
将成为所有元素的交集。 现在,如果要复制通用元素,则需要将最终列表添加到“设置并完成”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.