list集合根据jsonobjectvalue排序_Java之List集合两种排序的性能比较
本次测试环境为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集合两种排序的性能比较相关推荐
- arraylist java 排序_「arraylist排序」java ArrayList的两种排序方法 - seo实验室
arraylist排序 1.ArrayList使用排序的初衷 我们知道ArrayList的好处是可以不用限定容器的大小,他会根据元素的增加自己扩大.但是存储进去的数据类型都会变成object,虽然每个 ...
- 按照姓名升序排序的代码_好程序员Java培训分享Java集合的两种排序方法
好程序员Java培训分享Java集合的两种排序方法,Java集合的工具类Collections中提供了两种排序的方法,分别是: 1.Collections.sort(List list) 2.Coll ...
- day06-元组字典集合常用两种排序
Day06-元组&字典&集合&常用两种排序 一.tuple元组 1.概述 和列表相似,本质上是一种有序的集合 元组和列表的不同之处: a.列表:[ ] 元组:( ) b ...
- Java两种排序方式快慢比较
2019独角兽企业重金招聘Python工程师标准>>> Java中List的排序方式有两种,现在我们测试下这两种排序方式的快慢吧,我们需要用到两个类, 一个是运行程序的Main类,另 ...
- 基于迭代次数和分类准确率的两种排序
(A,B)---81*30*2---(1,0)(0,1) 让分类原点A为mnist的0,分类对象B是1-9,固定收敛误差,统计迭代次数,并将迭代次数作为B到A的距离,得到数轴 A 5 7 2 4 3 ...
- mysql中两次排序_MySQL中的两种排序方式: index和filesort
index :通过有序索引顺序扫描直接返回有序数据,不需要额外的排序,操作效率较高. filesort:通过对返回数据进行排序,filesort 并不代表通过磁盘文件排序,而是说明进行了一个排序操作, ...
- 【MySQL】MySQL 两种排序算法
1.概述 原文:高性能MySQL一书.再抄的,找得快. 无论如何排序都是-一个成本很高的操作,所以从性能角度考虑,应尽可能避免排序或者尽可能避免对大量数据进行排序. 当不能使用索引生成排序结果的时候M ...
- 两种排序方法(直接判断)
题目描述 考拉有n个字符串字符串,任意两个字符串长度都是不同的.考拉最近学习到有两种字符串的排序方法: 1.根据字符串的字典序排序.例如: "car" < "car ...
- 【字符串2】(删除公共字符、合法括号序列判断、两种排序方法、密码强度等级)
字符串题集 1. 删除公共字符 题目描述 题目分析 C++代码 2. 合法括号序列判断 题目描述 题目分析 C++代码 3. 两种排序方法 题目描述 题目分析 C++代码 4. 密码强度等级 题目描述 ...
- 刷题日记【第四篇】-笔试必刷题【Fibonacci数列+合法括号序列判断+两种排序方法+求最小公倍数】
目录 选择题模块 1. 以下对继承的描述错误的是(A) 2. 在Java中,一个类(B) 3. 以下不是Object 类的方法的是(D) 4. Test.main() 函数执行后的输出是(D) 编程题 ...
最新文章
- 求自定类型元素序列的中位数
- python饼图怎么显示中文_python生成饼图解决中文乱码
- 剑指offer 面试31题
- NS2安装错误系列(1)
- CentOS7 安装 Gitlab
- ZedGraph怎样在双击图形后添加箭头标记
- vectorvn1610报价_【8.5873.5444.G323】价格_厂家 - 中国供应商
- Python面向对象2-类和构造方法
- [转载] mysql 索引中的USING BTREE 的意义
- iOS中assign、copy 、retain等关键字的含义
- (十三)nodejs循序渐进-高性能游戏服务器框架pomelo之扩展聊天服务器为机器人自动聊天
- blob没权限 ie_vuerouter 源码和动态路由权限分配
- 【干货】微信小程序实例源码大全
- 如何进行Tuxera NTFS的挂载卷设置?
- 基于RV1126平台imx291分析 --- imx291注册
- Java邮件发送(使用javaMail包)
- 机器人bl虐心_【原创】爱你、无悔(双赛,BL,微虐,含H)
- E. Eggfruit Cake
- w锋ndows用户组设置,第2章Wndows+Server+2008本地用户和组.ppt
- 学习编程可以从事哪些行业