Java List去重以及效率分析
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最快!

Java List去重以及效率分析的更多相关文章
- java list去重方式,以及效率问题
之前面试被问到关于java如何去重的问题,当时没怎么留意,今天刚好项目中用到了,所以记录一下. 实体类: /** * 用户类 */ class User{ private String usernam ...
- JDK8 Stream 数据流效率分析
JDK8 Stream 数据流效率分析 Stream 是Java SE 8类库中新增的关键抽象,它被定义于 java.util.stream (这个包里有若干流类型: Stream<T> ...
- JAVA常用数据结构及原理分析
JAVA常用数据结构及原理分析 http://www.2cto.com/kf/201506/412305.html 前不久面试官让我说一下怎么理解java数据结构框架,之前也看过部分源码,balaba ...
- java fork-join框架应用和分析
http://shmilyaw-hotmail-com.iteye.com/blog/1897636 java fork-join框架应用和分析 博客分类: concurrency multithre ...
- Java的LockSupport.park()实现分析(转载)
LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了基本的线程同步原语.LockSupport实际上是调用了Unsafe类里的函数,归结到Unsafe里,只有两个函数: p ...
- java list 去重
Guava ImmutableSet源码去重处理,Hash处理 - 汪小哥 - CSDN博客 https://blog.csdn.net/u012881904/article/details/6895 ...
- (6)Java数据结构-- 转:JAVA常用数据结构及原理分析
JAVA常用数据结构及原理分析 http://www.2cto.com/kf/201506/412305.html 前不久面试官让我说一下怎么理解java数据结构框架,之前也看过部分源码,balab ...
- 细说并发5:Java 阻塞队列源码分析(下)
上一篇 细说并发4:Java 阻塞队列源码分析(上) 我们了解了 ArrayBlockingQueue, LinkedBlockingQueue 和 PriorityBlockingQueue,这篇文 ...
- group by与distinct效率分析及优化措施
如何使用group by进行去重 因为mysql的distinct在结果集中,全部不同,才可以去重.所以,当我们进行去重处理的时候,需要单独对某列进行去重,可以使用group by子句进行分组去重se ...
随机推荐
- k8s helm 安装etcd
待续 helm install etcd bitnami/etcd \ --set statefulset.replicaCount=3 \ --set persistence.enabled=tru ...
- 基于MATLAB的手写公式识别(7)
今天晚上通过对原有T4模型的修改实现: 1.可以识别真彩图形.(这基本是一样大的,通过这个了解图像分割的原理) 2.在识别心脑管血药类的基础上实现数字的识别.(了解图像识别原理,熟练掌握图像分割技术) ...
- 1038 Recover the Smallest Number
Given a collection of number segments, you are supposed to recover the smallest number from them. Fo ...
- C - Harmonic Number(调和级数+欧拉常数)
In mathematics, the nth harmonic number is the sum of the reciprocals of the first n natural numbers ...
- fullpage.js用法总结
兼容性: 支持 IE8+ 及其他现代浏览器. 主要功能: 1.支持鼠标滚动: 2.支持前进后退键盘控制; 3.多个回调函数; 4.支持手机.移动设备; 5.支持窗口缩放自动调整; 6.可设置滚动宽度. ...
- Android NDK工程的编译和链接以及使用gdb进行调试
前提条件:已经安装了JDK 6.0.android SDK.NDK r9和eclipsele4.2开发环境. 推荐下载Android开发的综合套件adt-bundle-windows-x86,再下载A ...
- UC-Android逆向工程师 面试题1的分析
1.简介 这个题目是一位吾爱破解的坛友在面试UC的Android逆向工程事时,遇到的题目.此题不难,与阿里移动去年移动安全比赛的题目差不多,题目的验证方式也是查表对比,并且这个表的数据是放在文件中的. ...
- Hydra暴力破解工具的用法
目录 Hydra 常见参数 破解SSH 破解FTP 破解HTTP 破解3389远程登录 Kali自带密码字典 dirb dirbuster fern-wifi metasploit wfuzz Hyd ...
- nginx 配置后页面访问是报500错
该问题是html文件权限问题. 用jenkins 并远程服务器上传到另一台服务器的html ,在配置好nginx 的location root 绝对位置后还是报错500 手工用root上传时访问正常 ...
- Spring context的refresh函数执行过程分析
今天看了一下Spring Boot的run函数运行过程,发现它调用了Context中的refresh函数.所以先分析一下Spring context的refresh过程,然后再分析Spring boo ...