日期:2014-05-20  浏览次数:20722 次

Java List的交集,并集和补集
2个List: A和B,各自的size()都是几万的级别,有什么算法可以高效地计算出它们的交集,并集和补集

以并集为例,很容易想到下面的算法:
A.removeAll(B);
A.addAll(B);

但是实验发现,removeAll和addAll效率极低,2个List都是几万的级别时,处理起来竟然要几十秒钟,自己尝试写了其他的算法,最快也得10几秒钟的处理时间,想请教大家有什么更好的算法可以快速地计算呢?也可以不用List,只要能实现对两组大数据的交集,并集和补集

------解决方案--------------------
用linkedList来删除或插入效率较高。

并集可以将所有list中的元素放到set中,这样就可以去掉重复得到并集。

交集可循环较小的list,然后逐个判断其他list中是否包含该项元素,包含就放到一个新的list。