本次测试环境为JDK1.8环境下

借用医学的那句话,抛开数据量谈性能都是耍流氓,本次的性能测试分为三档,即万级数据、十万级数据、百万级数据

万级数据量

List userList = new ArrayList<>();Random rand = new Random();for (int i = 0; i <10000 ; i++) {  User user = new User();  user.setId(rand.nextInt(1000));  user.setCompanyId(rand.nextInt(1000));  userList.add(user);}Long startTime = System.currentTimeMillis();userList.sort((a, b)-> b.getId().compareTo(a.getId()));System.out.println("List.sort()耗时:"+(System.currentTimeMillis()-startTime)+"ms");Long startTime1 = System.currentTimeMillis();userList.stream().sorted(Comparator.comparing(User::getCompanyId)).collect(Collectors.toList());System.out.println("stream.sort耗时:"+(System.currentTimeMillis() - startTime1)+"ms");运行结果:List.sort()   耗时:116msstream.sort耗时:27ms

结论:很明显是stream优势非常明显,相差4~5倍!

十万级数据量

List userList = new ArrayList<>();Random rand = new Random();for (int i = 0; i <100000 ; i++) {  User user = new User();  user.setId(rand.nextInt(1000));  user.setCompanyId(rand.nextInt(1000));  userList.add(user);}Long startTime = System.currentTimeMillis();userList.sort((a, b)-> b.getId().compareTo(a.getId()));System.out.println("List.sort()耗时:"+(System.currentTimeMillis()-startTime)+"ms");Long startTime1 = System.currentTimeMillis();userList.stream().sorted(Comparator.comparing(User::getCompanyId)).collect(Collectors.toList());System.out.println("stream.sort耗时:"+(System.currentTimeMillis() - startTime1)+"ms");运行结果:List.sort()耗时:150msstream.sort耗时:197msList.sort()耗时:142msparallelStream.sort耗时:193ms

结论:可以看到在十万级数据量stream已经优势不再,并行流也一样,反而List接口的默认方法却优势很突出

百万级数据量

        List userList = new ArrayList<>();        Random rand = new Random();        for (int i = 0; i <1000000 ; i++) {            User user = new User();            user.setId(rand.nextInt(1000));            user.setCompanyId(rand.nextInt(1000));            userList.add(user);        }        Long startTime = System.currentTimeMillis();        userList.sort((a, b)-> b.getId().compareTo(a.getId()));        System.out.println("List.sort()耗时:"+(System.currentTimeMillis()-startTime)+"ms");        Long startTime1 = System.currentTimeMillis();        userList.stream().sorted(Comparator.comparing(User::getCompanyId)).collect(Collectors.toList());        System.out.println("stream.sort耗时:"+(System.currentTimeMillis() - startTime1)+"ms")运行结果:List.sort()耗时:523msstream.sort耗时:824ms

可以发现随着数据量的增大,stream的排序效率越来越差,由此可以得出结论:

在万级数据及以下,优先选择stream排序;

在十万级及以上,那么则需要选择List提供的sort方法进行排序效率更高!

list集合根据jsonobjectvalue排序_Java之List集合两种排序的性能比较相关推荐

  1. arraylist java 排序_「arraylist排序」java ArrayList的两种排序方法 - seo实验室

    arraylist排序 1.ArrayList使用排序的初衷 我们知道ArrayList的好处是可以不用限定容器的大小,他会根据元素的增加自己扩大.但是存储进去的数据类型都会变成object,虽然每个 ...

  2. 按照姓名升序排序的代码_好程序员Java培训分享Java集合的两种排序方法

    好程序员Java培训分享Java集合的两种排序方法,Java集合的工具类Collections中提供了两种排序的方法,分别是: 1.Collections.sort(List list) 2.Coll ...

  3. day06-元组字典集合常用两种排序

    Day06-元组&字典&集合&常用两种排序 一.tuple元组 1.概述 和列表相似,本质上是一种有序的集合 元组和列表的不同之处: ​ a.列表:[ ] 元组:( ) ​ b ...

  4. Java两种排序方式快慢比较

    2019独角兽企业重金招聘Python工程师标准>>> Java中List的排序方式有两种,现在我们测试下这两种排序方式的快慢吧,我们需要用到两个类, 一个是运行程序的Main类,另 ...

  5. 基于迭代次数和分类准确率的两种排序

    (A,B)---81*30*2---(1,0)(0,1) 让分类原点A为mnist的0,分类对象B是1-9,固定收敛误差,统计迭代次数,并将迭代次数作为B到A的距离,得到数轴 A 5 7 2 4 3 ...

  6. mysql中两次排序_MySQL中的两种排序方式: index和filesort

    index :通过有序索引顺序扫描直接返回有序数据,不需要额外的排序,操作效率较高. filesort:通过对返回数据进行排序,filesort 并不代表通过磁盘文件排序,而是说明进行了一个排序操作, ...

  7. 【MySQL】MySQL 两种排序算法

    1.概述 原文:高性能MySQL一书.再抄的,找得快. 无论如何排序都是-一个成本很高的操作,所以从性能角度考虑,应尽可能避免排序或者尽可能避免对大量数据进行排序. 当不能使用索引生成排序结果的时候M ...

  8. 两种排序方法(直接判断)

    题目描述 考拉有n个字符串字符串,任意两个字符串长度都是不同的.考拉最近学习到有两种字符串的排序方法: 1.根据字符串的字典序排序.例如: "car" < "car ...

  9. 【字符串2】(删除公共字符、合法括号序列判断、两种排序方法、密码强度等级)

    字符串题集 1. 删除公共字符 题目描述 题目分析 C++代码 2. 合法括号序列判断 题目描述 题目分析 C++代码 3. 两种排序方法 题目描述 题目分析 C++代码 4. 密码强度等级 题目描述 ...

  10. 刷题日记【第四篇】-笔试必刷题【Fibonacci数列+合法括号序列判断+两种排序方法+求最小公倍数】

    目录 选择题模块 1. 以下对继承的描述错误的是(A) 2. 在Java中,一个类(B) 3. 以下不是Object 类的方法的是(D) 4. Test.main() 函数执行后的输出是(D) 编程题 ...

最新文章

  1. 求自定类型元素序列的中位数
  2. python饼图怎么显示中文_python生成饼图解决中文乱码
  3. 剑指offer 面试31题
  4. NS2安装错误系列(1)
  5. CentOS7 安装 Gitlab
  6. ZedGraph怎样在双击图形后添加箭头标记
  7. vectorvn1610报价_【8.5873.5444.G323】价格_厂家 - 中国供应商
  8. Python面向对象2-类和构造方法
  9. [转载] mysql 索引中的USING BTREE 的意义
  10. iOS中assign、copy 、retain等关键字的含义
  11. (十三)nodejs循序渐进-高性能游戏服务器框架pomelo之扩展聊天服务器为机器人自动聊天
  12. blob没权限 ie_vuerouter 源码和动态路由权限分配
  13. 【干货】微信小程序实例源码大全
  14. 如何进行Tuxera NTFS的挂载卷设置?
  15. 基于RV1126平台imx291分析 --- imx291注册
  16. Java邮件发送(使用javaMail包)
  17. 机器人bl虐心_【原创】爱你、无悔(双赛,BL,微虐,含H)
  18. E. Eggfruit Cake
  19. w锋ndows用户组设置,第2章Wndows+Server+2008本地用户和组.ppt
  20. 学习编程可以从事哪些行业

热门文章

  1. Page.Validate()方法
  2. 面试题:老师生日分析过程,能否建模用程序解答?
  3. 5.支付平台架构:业务、规划、设计与实现 --- 账务系统
  4. 7. 开启 mysql remote access
  5. 黑客语言Python
  6. 三星Galaxy note I9220 系统廋身
  7. linux go环境安装
  8. ESXi主机性能问题
  9. Python学习之OS模块初识
  10. 【一步一步】Spring 源码环境搭建