forforeachstream 哪家的效率更高,你真的用对了吗?

Posted Java程序员飞飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了forforeachstream 哪家的效率更高,你真的用对了吗?相关的知识,希望对你有一定的参考价值。

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

比较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循环____________");
        }
    }
}

测试结果:
图片
运行多次,时间基本落在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____________");
        });
    }
}

测试结果:
图片
运行多次,时间基本落在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处理____________");
        });
    }
}

测试结果:
图片

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

得出结论:

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

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

for循环

图片

时间落在43240附近。

foreach循环

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

Stream

图片

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

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

得出结论:

★数据量上去之后,测试三种遍历方式,基本已经没有什么差距了,但是Stream提供并行处理,在数据量大了之后,效率会明显增强。(但是单核CPU,Stream并行处理可能会效率更慢)”
下次用什么来做遍历操作,你清楚了吗?
欢迎可以来java架构交流群进行交流,如果不清楚的也可以来群里学习!!!

以上是关于forforeachstream 哪家的效率更高,你真的用对了吗?的主要内容,如果未能解决你的问题,请参考以下文章

Java培训最好的是哪家?

请问Python哪家培训机构好?

开发app找哪家公司比较好?

JSON 解析和XML解析 哪个效率更高

益阳学Python去哪家好?

IN和EXISTS谁效率更高