加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java List去重以及效率分析

发布时间:2020-12-15 07:20:11 所属栏目:Java 来源:网络整理
导读:List去重无非几种方法: 下面文章提供的两种: https://blog.csdn.net/u012156163/article/details/78338574, 以及使用List.stream.distinct()。 文章中还提到了HashSet和linkHashSet,而且测试结果linkHashSet居然比hashSet还快,想了很久感觉linkedHashSe

List去重无非几种方法:

下面文章提供的两种:
https://blog.csdn.net/u012156163/article/details/78338574,

以及使用List.stream.distinct()。

文章中还提到了HashSet和linkHashSet,而且测试结果linkHashSet居然比hashSet还快,想了很久感觉linkedHashSet怎么可能快于hashSet,

另外网上也没有针对distinct方法的效率分析,遂自己写了个测试程序测试了下:

数据量1w,碰撞率1/10,hashset基本是1毫秒,linkedHashSet是1-2毫秒,distinct是60毫秒左右
数据量1w,碰撞率1/100,hashset基本是1-2毫秒,linkedHashSet是8-10毫秒,distinct是100毫秒左右

数据量10w时,碰撞率1/10,hashset 23毫秒,linkedHashSet是39毫秒,distinct 68毫秒。
数据量10w时,碰撞率1/100,hashset 6毫秒,linkedHashSet是11毫秒,distinct 53毫秒。

数据量100w时,碰撞率1/10,hashset 242毫秒,linkedHashSet 288毫秒,distinct 230毫秒左右。另外多次测试发现三者不相上下,有多次linkedhashSet快于hashSet
数据量100w时,碰撞率1/100,hashset 36毫秒,linkedHashSet 43毫秒,distinct 82毫秒左右。

特意跑了一下:
数据量100,碰撞率1/10,hashset两种方式均为0毫秒,distinct为60毫秒

发现当碰撞率比较高的时候,数据量大了后使用哪种方法效率都差不多。当碰撞率低的时候,hashset的效果就明显了。
看了下hashset的实现源码,最终也是通过new linkedHashSet(源码居然也是用linkedHashSet而不是hashSet,可能linkedHashSet真的优于纯粹的hashSet?)来实现的,只不过在stream框架下,可能为了可以使用parallelStream进行并发处理,外层套了mapreduce,宏观来看是有冗余操作的,
如果是单纯的去个重的话,其实有点大刀小用的意思。

一句话总结,如果单纯的只是对容器去个重的话,hashSet最快!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读