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去重以及效率分析的更多相关文章

  1. java list去重方式,以及效率问题

    之前面试被问到关于java如何去重的问题,当时没怎么留意,今天刚好项目中用到了,所以记录一下. 实体类: /** * 用户类 */ class User{ private String usernam ...

  2. JDK8 Stream 数据流效率分析

    JDK8 Stream 数据流效率分析 Stream 是Java SE 8类库中新增的关键抽象,它被定义于 java.util.stream (这个包里有若干流类型: Stream<T> ...

  3. JAVA常用数据结构及原理分析

    JAVA常用数据结构及原理分析 http://www.2cto.com/kf/201506/412305.html 前不久面试官让我说一下怎么理解java数据结构框架,之前也看过部分源码,balaba ...

  4. java fork-join框架应用和分析

    http://shmilyaw-hotmail-com.iteye.com/blog/1897636 java fork-join框架应用和分析 博客分类: concurrency multithre ...

  5. Java的LockSupport.park()实现分析(转载)

    LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了基本的线程同步原语.LockSupport实际上是调用了Unsafe类里的函数,归结到Unsafe里,只有两个函数: p ...

  6. java list 去重

    Guava ImmutableSet源码去重处理,Hash处理 - 汪小哥 - CSDN博客 https://blog.csdn.net/u012881904/article/details/6895 ...

  7. (6)Java数据结构-- 转:JAVA常用数据结构及原理分析

    JAVA常用数据结构及原理分析  http://www.2cto.com/kf/201506/412305.html 前不久面试官让我说一下怎么理解java数据结构框架,之前也看过部分源码,balab ...

  8. 细说并发5:Java 阻塞队列源码分析(下)

    上一篇 细说并发4:Java 阻塞队列源码分析(上) 我们了解了 ArrayBlockingQueue, LinkedBlockingQueue 和 PriorityBlockingQueue,这篇文 ...

  9. group by与distinct效率分析及优化措施

    如何使用group by进行去重 因为mysql的distinct在结果集中,全部不同,才可以去重.所以,当我们进行去重处理的时候,需要单独对某列进行去重,可以使用group by子句进行分组去重se ...

随机推荐

  1. aws EKS EFS storageclass PV PVC Pod

    storageclass [root@localhost specs]# cat storageclass.yaml kind: StorageClass apiVersion: storage.k8 ...

  2. kubernetes 的API 介绍

    在API conventions doc中描述了API的全部协议. 在API Reference文档中描述了API的端点.资源类型和示例. 在Controlling API Access doc中讨论 ...

  3. volatile修饰全局变量,可以保证并发安全吗?

    今天被人问到volatile能不能保证并发安全? 呵,这能难倒我? 上代码: //电脑太好,100线程起步~public class ThreadTest { private static volat ...

  4. 基于MATLAB的手写公式识别(5)

    基于MATLAB的手写公式识别 总结一下昨天一天的工作成果: 获得了大致的识别过程. 一个图像从生肉到可以被处理需要经过预处理(灰质化.增加对比度.中值过滤.膨胀或腐蚀.闭环运算). 掌握了相关函数的 ...

  5. 用C/C++手撕CPlus语言的集成开发环境(1)—— 语言规范 + 词法分析器

    序言 之所以叫做CPlus语言,是因为原本是想起名为CMinus的,结果发现GitHub和Gitee上一堆的CMinus的编译器(想必都是开过编译原理课程并且写了个玩具级的语言编译器的大佬们吧).但是 ...

  6. 在 Y 分钟内学会 Python

    在 Y 分钟内学会 Python 这是翻译, 原文地址: Learn Python in Y Minutes 在 90 年代初, Python 由 Guido van Rossum 创造, 现在, 它 ...

  7. 判断post,ajax,get请求的方法

    判断post,ajax,get请求的方法 define('IS_GET',isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] ...

  8. POJ 1201 差分约束(集合最小元素个数)

    题意:       给你一个集合,然后有如下输入,a ,b ,c表示在范围[a,b]里面有至少有c个元素,最后问你整个集合最少多少个元素. 思路:       和HDU1384一模一样,首先这个题目可 ...

  9. Windows核心编程 第五章 作业(下)

    5.4 查询作业统计信息 前面已经介绍了如何使用 Q u e r y I n f o r m a t i o n J o b O b j e c t函数来获取对作业的当前限制信息.也可以使用它来获取关 ...

  10. javaScript的成长之路【何为函数,面向对象又是啥!!!】