for、foreach、stream 哪家的效率更高,你真的用对了吗?

昨天在《SQL中那么多函数,Java8为什么还要提供重复的Stream方法,多此一举?》一文中,有同学指出Stream在数据量不庞大的情况,效率不如for循环。

添加图片注释,不超过 140 字(可选)

这个就触及到我的知识盲区了,今天赶紧测试了一下,以下是正文,有问题欢迎大家指出,一起学习!

添加图片注释,不超过 140 字(可选)

比较for循环、foreach循环及Stream方法效率

for循环

首先,10000数据的for循环,代码如下:

 
 

public class ForTest { public static void main(String[] args) { Long startTime = System.currentTimeMillis(); formMethod(); Long endTime = System.currentTimeMillis(); System.out.println("time_total:" + (endTime - startTime)); } public static void formMethod(){ for (int i = 0; i < 10000; i++) { System.out.println("__________for循环____________"); } } }

测试结果:

添加图片注释,不超过 140 字(可选)

运行多次,时间基本落在100内,90左右。

foreach循环

同样数据量,代码如下:

 
 

public class ForTest { public static void main(String[] args) { List<Integer> lists = new ArrayList<>(); for (int i = 0; i < 10000; i++) { lists.add(i); } Long startTime = System.currentTimeMillis(); formMethod(lists); Long endTime = System.currentTimeMillis(); System.out.println("time_total:" + (endTime - startTime)); } public static void formMethod(List<Integer> lists){ lists.forEach(i->{ System.out.println("__________forEach____________"); }); } }

测试结果:

添加图片注释,不超过 140 字(可选)

运行多次,时间基本落在150左右。额,这个增强型效果不如for循环~

Stream

同样数据量,代码如下:

 
 

public class ForTest { public static void main(String[] args) { List<Integer> lists = new ArrayList<>(); for (int i = 0; i < 10000; i++) { lists.add(i); } Long startTime = System.currentTimeMillis(); formMethod(lists); Long endTime = System.currentTimeMillis(); System.out.println("time_total:" + (endTime - startTime)); } public static void formMethod(List<Integer> lists){ lists.stream().forEach(i->{ System.out.println("__________stream处理____________"); }); } }

测试结果:

添加图片注释,不超过 140 字(可选)

基本和增强型for循环效率差别不大。

得出结论:

★ 1万以内的数据,for循环的性能要高于foreach和stream; ”

昨天那位同学说的没毛病!!!

数据加到1000万,代码不变,看结果:

for循环

添加图片注释,不超过 140 字(可选)

时间落在43240附近。

foreach循环

添加图片注释,不超过 140 字(可选)

基本和for循环效率差别不大。

Stream

添加图片注释,不超过 140 字(可选)

基本和for循环,增强型for循环效率差别不大。

Stream的优势在于,提供了并行处理(parallelStream()方法),即stream api提供了异步处理机制,可以充分利用CPU核数,大大提升效率!因为机器配置原因,没有给出并行处理下的结果截图~~

得出结论:

★ 数据量上去之后,测试三种遍历方式,基本已经没有什么差距了,但是Stream提供并行处理,在数据量大了之后,效率会明显增强。(但是单核CPU,Stream并行处理可能会效率更慢) ”

下次用什么来做遍历操作,你清楚了吗?

                                                                                                                                           资源获取:
大家 点赞、收藏、关注、评论啦 、 查看👇🏻👇🏻👇🏻 微信公众号获取联系方式👇🏻👇🏻👇🏻
精彩专栏推荐订阅:下方专栏👇🏻👇🏻👇🏻👇🏻

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值