Java 中 List 的5种遍历方式

本测试没有具体业务,单纯遍历,也许会有误差。


主单元测试方法

    @Test
    public void test(){
        List<Integer> list = new ArrayList<>();
        int n = 1000_0000;
        for (int i = 0; i < n; i++) {
            list.add(i);
        }

        System.out.println("======== 1 fori 推荐 ==========");
        foriTest(list);
        System.out.println("======== 2 iterator ==========");
        iteratorTest(list);
        System.out.println("======== 3 增强for ==========");
        forBoostTest(list);
        System.out.println("======== 4 forEach 最耗时 java8 ==========");
        forEachTest(list);
        System.out.println("======== 5 stream forEach 比较耗时和增强for差不多 java8 ==========");
        streamForEachTest(list);
        System.out.println("======== 6 parallelStream  java8 ==========");
        parallelStreamForEachTest(list);
    }

测试1000万数据测试结果
======== 1 fori 推荐 ==========
for i time=7
======== 2 iterator ==========
iterator for time=8
iterator while time=8
======== 3 增强for ==========
for Boost time=	22
======== 4 forEach 最耗时 java8 ==========
list.forEach time=69
======== 5 stream forEach 比较耗时和增强for差不多 java8 ==========
list.stream().forEach time=23
======== 6 parallelStream forEach 并行 java8 ==========
list.parallelStream().forEach time=28

1、普通fori 方式遍历
    /**
     * 1
     * 普通fori
     * 效率最高,也是java官方推荐的用法
     *
     * @param list
     */
    public static void foriTest(List<Integer> list) {
        long before = System.currentTimeMillis();
        int j = list.size();
        for (int i = 0; i < j; i++) {
            list.get(i);
        }
        long after = System.currentTimeMillis();
        System.out.println("for i time=\t"  + (after - before));
    }

2、iterate()迭代器方式(collection 集合共有方法)
    /**
     * 2 iterator
     * 迭代器
     * @param list
     */
    public static void iteratorTest(List<Integer> list) {
        long before = System.currentTimeMillis();
        for (Iterator<Integer> iterator = list.iterator(); iterator.hasNext(); ) {
            iterator.next();
        }
        long after = System.currentTimeMillis();
        System.out.println("iterator for time=\t"  + (after - before));

        before = System.currentTimeMillis();
        /**
         * while 循环写法
         */
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()) {
            iterator.next();
        }
        after = System.currentTimeMillis();
        System.out.println("iterator while time=\t"  + (after - before));
    }

3、增强for
    /**
     * 3
     * 增强for
     * @param list
     */
    public static void forBoostTest(List<Integer> list) {
        long before = System.currentTimeMillis();
        for (int item : list) {
            // System.out.println(item);
        }
        long after = System.currentTimeMillis();
        System.out.println("for Boost time=\t"  + (after - before));
    }

4、forEach() 注意java8 才支持
    /**
     * 4 foreach
     * foreach 最慢不推荐 java8 lambda
     * @param list
     */
    public static void forEachTest(List<Integer> list) {
        long before = System.currentTimeMillis();
        list.forEach(item -> {
            // System.out.println(item);
        });
        long after = System.currentTimeMillis();
        System.out.println("list.forEach time=\t"  + (after - before));
    }

5、stream().forEach() 注意java8 才支持
    /**
     * 5 stream foreach
     * stream foreach java8 特有
     * @param list
     */
    public static void streamForEachTest(List<Integer> list) {
        long before = System.currentTimeMillis();
        list.stream().forEach(item -> {
            // System.out.println(item);
        });
        long after = System.currentTimeMillis();
        System.out.println("list.stream().forEach time=\t"  + (after - before));
    }

6、parallelStream().forEach() 注意java8 才支持
    /**
     * 5 stream foreach
     * stream foreach java8 特有
     * @param list
     */
    public static void parallelStreamForEachTest(List<Integer> list) {
        long before = System.currentTimeMillis();
        list.parallelStream().forEach(item -> {
            // System.out.println(item);
        });
        long after = System.currentTimeMillis();
        System.out.println("list.parallelStream().forEach time=\t"  + (after - before));
    }

作者:sxhxh

出处:https://www.cnblogs.com/sxhxh/p/16756113.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   过情关  阅读(331)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示