Java常用的7中遍历方式速度比较

接口格式
测试速度的接口,其中num为传入的数据的容量,我们分别传入10000和30000两种的数据量,来测试一下7种方式遍历

         @GetMapping("/speed")
         public void testSpeed(@RequestParam Integer num){
             List<Integer> lists = new ArrayList<>();
             for (int i=0;i<num;i++){
                 lists.add(i);
             }
             testSpeed(lists);
         }

遍历方式
1.普通for循环
        //1.普通for循环
        long before = System.currentTimeMillis();
        for (int i=0;i<lists.size();i++){
            System.out.print(i);
        }
        long after = System.currentTimeMillis();
        System.out.println();
        System.out.println("普通for循环:"+(after-before));

2.forEach循环
        //2.forEach循环
        long before2 = System.currentTimeMillis();
        for (int current:lists){
            System.out.print(current);
        }
        long after2 = System.currentTimeMillis();
        System.out.println();
        System.out.println("forEach循环:"+(after2-before2));

3.迭代器循环
        //3.iterator循环
        long before3 = System.currentTimeMillis();
        Iterator<Integer> iterator = lists.iterator();
        while (iterator.hasNext()){
            System.out.print(iterator.next());
        }
        long after3 = System.currentTimeMillis();
        System.out.println();
        System.out.println("迭代器循环:"+(after3-before3));

4.List.forEach
        //4.List.forEach循环
        long before4 = System.currentTimeMillis();
        lists.forEach(
                i -> System.out.print(i)
        );
        long after4 = System.currentTimeMillis();
        System.out.println();
        System.out.println("List.forEach:"+(after4-before4));

5.lists.stream().forEach
        //5.stream().forEach
        long before5 = System.currentTimeMillis();
        lists.stream().forEach(
                i-> System.out.print(i)
        );
        long after5 = System.currentTimeMillis();
        System.out.println();
        System.out.println("lists.stream().forEach:"+(after5-before5));

6.lists.parallelStream().forEach
        //6.parallelStream().forEach
        long before6 = System.currentTimeMillis();
        lists.parallelStream().forEach(
                i-> System.out.print(i)
        );
        long after6 = System.currentTimeMillis();
        System.out.println();
        System.out.println("lists.parallelStream().forEach:"+(after6-before6));

7.lists.parallelStream().forEachOrdered
        //7.parallelStream().forEachOrdered
        long before7 = System.currentTimeMillis();
        lists.parallelStream().forEachOrdered(
                i-> System.out.print(i)
        );
        long after7 = System.currentTimeMillis();
        System.out.println();
        System.out.println("lists.parallelStream().forEachOrdered:"+(after7-before7));

结果
通过10000和30000的数据量结果如下,结果和我之前想的完全不一样,之前一直以为并行流要比串行流快很多,但是事实却是…

10000数据量:
排序方式    耗时(ms)
普通for循环    48
forEach循环    46
迭代器循环    47
List.forEach    47
lists.stream().forEach    49
lists.parallelStream().forEach    61
lists.parallelStream().forEachOrdered    58
耗时比较:
forEach循环 < List.forEach < 迭代器循环 < 普通for循环 < lists.stream().forEach < lists.parallelStream().forEachOrdered < lists.parallelStream().forEach

30000数据量:
排序方式    耗时(ms)
普通for循环    135
forEach循环    140
迭代器循环    140
List.forEach    137
lists.stream().forEach    138
lists.parallelStream().forEach    221
lists.parallelStream().forEachOrdered    144
耗时比较:
List.forEach    < lists.stream().forEach    < 迭代器循环 <= forEach循环 < 普通for循环    < lists.parallelStream().forEachOrdered < lists.parallelStream().forEach
————————————————
https://blog.csdn.net/sinat_22797429/article/details/86663979

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值