概述
背景
最近,需要优化程序的性能,为了尽可能地减少时间,我尝试从尽量多的方面提升性能,包括加快循环。为此我将程序中的对集合的循环改换为stream操作,但出乎意料的是,即便是parallelStream,循环的效率反而不如for循环。在查阅了网上许多的资料和博客,并自己做了实验之后,才正确地认识到这些语句产生的目的。
实验
首先是自己做实验用的代码
@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两种实现方式,下为核心代码
//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对集合遍历操作的时间性能的简单比较所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复