Java List的交集,并集和补集

Chision-Lin 2014-01-02 10:46:20
2个List: A和B,各自的size()都是几万的级别,有什么算法可以高效地计算出它们的交集,并集和补集

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

但是实验发现,removeAll和addAll效率极低,2个List都是几万的级别时,处理起来竟然要几十秒钟,自己尝试写了其他的算法,最快也得10几秒钟的处理时间,想请教大家有什么更好的算法可以快速地计算呢?也可以不用List,只要能实现对两组大数据的交集,并集和补集
...全文
877 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
老李_timothy 2016-05-20
  • 打赏
  • 举报
回复
引用 2 楼 chision 的回复:
[quote=引用 1 楼 peng_hao1988 的回复:] 用linkedList来删除或插入效率较高。 并集可以将所有list中的元素放到set中,这样就可以去掉重复得到并集。 交集可循环较小的list,然后逐个判断其他list中是否包含该项元素,包含就放到一个新的list。
非常感谢,试验了一下,同样是A.removeAll(B);和A.addAll(B);,LinkedList的效率跟ArrayList相差无几,甚至比ArrayList还差一些,而用Set真是神速!接下去我再自己研究下具体怎么运用Set完全取代List,如有其他问题再请教![/quote] 后来研究出来了吗? 贴一下结论吧?谢谢!
Chision-Lin 2014-01-02
  • 打赏
  • 举报
回复
引用 1 楼 peng_hao1988 的回复:
用linkedList来删除或插入效率较高。 并集可以将所有list中的元素放到set中,这样就可以去掉重复得到并集。 交集可循环较小的list,然后逐个判断其他list中是否包含该项元素,包含就放到一个新的list。
非常感谢,试验了一下,同样是A.removeAll(B);和A.addAll(B);,LinkedList的效率跟ArrayList相差无几,甚至比ArrayList还差一些,而用Set真是神速!接下去我再自己研究下具体怎么运用Set完全取代List,如有其他问题再请教!
桃园闲人 2014-01-02
  • 打赏
  • 举报
回复
用linkedList来删除或插入效率较高。 并集可以将所有list中的元素放到set中,这样就可以去掉重复得到并集。 交集可循环较小的list,然后逐个判断其他list中是否包含该项元素,包含就放到一个新的list。

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧