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

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

昨天在《SQL中那么多函数,Java8为什么还要提供反复的Stream办法,添枝加叶?》一文中,有同砚指出Stream在数据量不巨大的情况,听从不如for循环。

这个就触及到我的知识盲区了,今天赶忙测试了一下,以下是要文,有成绩接待各位指出,一同砚习!

比力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并行处理约莫会听从更慢)

下次用什么来做遍历利用,你清晰了吗?

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片