背景
最近,需要优化程序的性能,为了尽可能地减少时间,我尝试从尽量多的方面提升性能,包括加快循环。为此我将程序中的对集合的循环改换为stream操作,但出乎意料的是,即便是parallelStream,循环的效率反而不如for循环。在查阅了网上许多的资料和博客,并自己做了实验之后,才正确地认识到这些语句产生的目的。
实验
首先是自己做实验用的代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15@Test public void forTest() { Set<Integer> a = source(); //用作循环的集合,包含从1到1千万的integer long startTime = System.currentTimeMillis(); long sum = 0; for (Integer i : a) { //for循环 sum += i; } System.out.println(sum); long endTime = System.currentTimeMillis(); System.out.println("for循环消耗了" + (endTime - startTime) + "ms"); }
此外,还有迭代器,parallelStream两种实现方式,下为核心代码
复制代码
1
2
3
4
5
6
7
8
9//Iterator Iterator<Integer> it = a.iterator(); long sum = 0; while (it.hasNext()) { sum += it.next(); } //Stram long sum = a.parallelStream().mapToInt((x) -> x).summaryStatistics().getSum();
实验结果
在经过了测试之后,得到结果
实验结论
从循环的时间性能上来讲,for优于迭代器优于stream
看法
在翻阅的很多资料中,得到的结果都一致的说明了stream用作循环时性能确实反而下降了,同时也有很多人提到,stream的产生使得代码写起来更简便,看起来更美观,这应该就是stream诞生的原因吧。
最后
以上就是娇气月饼最近收集整理的关于for,Iterator,Stream对集合遍历操作的时间性能的简单比较的全部内容,更多相关for,Iterator,Stream对集合遍历操作内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复