我是靠谱客的博主 秀丽香氛,最近开发中收集的这篇文章主要介绍Java List循环一般写法与stream性能对比,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

如果需要对一个List进行循环,stream出来以后,我们又多了一种实现方式。但stream方式性能如何,各种说法都有,总体结论是没有一个标准答案,受各种环境影响。耳听为虚眼见为实,我们还是要自己动手试一下,才能有一个直观的感受,先直接上代码。


int size = 10;
// 为了防止读一个list读性能影响,各自读一个list
List<Integer> list1 = new ArrayList<>(size);
List<Integer> list2 = new ArrayList<>(size);
List<Integer> list3 = new ArrayList<>(size);
List<Integer> list4 = new ArrayList<>(size);
List<Integer> list5 = new ArrayList<>(size);
List<Integer> list6 = new ArrayList<>(size);
for(int i = 0; i < size; i++) {
list1.add(i);
list2.add(i);
list3.add(i);
list4.add(i);
list5.add(i);
list6.add(i);
}
// 用线程池来执行
ExecutorService executorService = Executors.newFixedThreadPool(6);
executorService.submit(()->{
long t = System.nanoTime();
List<String> result = new ArrayList<>(size);
for (int i = 0; i <list2.size(); i++) {
result.add(list2.get(i).toString());
}
System.out.println("for i i++ for time:
"+ (System.nanoTime()-t));
});
executorService.submit(()->{
long t = System.nanoTime();
List<String> result = new ArrayList<>(size);
for(Integer i : list3){
result.add(i.toString());
}
System.out.println("for i:list time:
" + (System.nanoTime()-t));
});
executorService.submit(()->{
long t = System.nanoTime();
List<String> result = new ArrayList<>(size);
list4.forEach(i->{
result.add(i.toString());
});
System.out.println("forEach time:
" + (System.nanoTime()-t));
});
executorService.submit(()->{
long t = System.nanoTime();
List<String> result = new ArrayList<>(size);
list5.stream().forEach(i->{
result.add(i.toString());
});
System.out.println("stream forEach time:
" + (System.nanoTime()-t));
});
executorService.submit(()->{
long t = System.nanoTime();
List<String> result = new ArrayList<>(size);
Iterator<Integer> iterator = list6.iterator();
while (iterator.hasNext()){
result.add(iterator.next().toString());
}
System.out.println("Iterator time:
" + (System.nanoTime()-t));
});
executorService.submit(()->{
long t = System.nanoTime();
List<String> result = new ArrayList<>(size);
list1.stream().parallel().forEach(i->{
result.add(i.toString());
});
System.out.println("stream parallel time:
" + (System.nanoTime()-t));
});
executorService.shutdown();

size=10时间

for i i++ for time:
87970
for i:list time:
89757
forEach time:
793869
Iterator time:
39434
stream forEach time:
2642666
stream parallel time:
5155739

size=100时间

for i i++ for time:
139793
for i:list time:
182722
forEach time:
893761
Iterator time:
184108
stream forEach time:
2585223
stream parallel time:
5255004

size=10000(1W)时间

for i i++ for time:
7956023
forEach time:
7671925
for i:list time:
8603284
Iterator time:
7251862
stream forEach time:
8667274
stream parallel time:
13332119

size=1000000(100W)时间

stream parallel time:
1777977752
for i:list time:
2896940689
forEach time:
2805157215
for i i++ for time:
2905048826
stream forEach time:
2807564613
Iterator time:
2810214441

size=5000000(500W)时间

stream parallel time:
3886700727
forEach time:
11432122944
for i:list time:
11443952632
for i i++ for time:
12148542655
Iterator time:
12156133873
stream forEach time:
12165886174

基本结论:从上面数据得出结论是数据量对性能评价影响较大,数据量无排序要求时推荐用stream parrellel,数据量比较小(100W以下),一般业务场景下,还是老老实实用普通写法吧,毕竟这么多年的优化,基本写法效率还是很高的。

最后

以上就是秀丽香氛为你收集整理的Java List循环一般写法与stream性能对比的全部内容,希望文章能够帮你解决Java List循环一般写法与stream性能对比所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部