• for循环和foreach循环遍历集合的效率比较


    先上代码

    package com.test;
    
    import java.util.ArrayList;
    import java.util.LinkedList;
    import java.util.List;
    
    public class Testttt {
        public static void main(String[] args) {
            // 实例化
            List<String> stringLinkedList = new LinkedList<String>();
            List<String> stringArrayList = new ArrayList<String>();
            // 插入数据
            for (int i = 0; i < 100000; i++) {
                stringLinkedList.add(String.valueOf(i));
                stringArrayList.add(String.valueOf(i));
            }
            String a = null;
            // 1、用for循环遍历ArrayList
            long forArrayMillis = System.currentTimeMillis();
            for (int i = 0; i < 100000; i++) {
                a = stringArrayList.get(i);
            }
            System.err.println("用for循环遍历ArrayList,耗时:" + String.valueOf(System.currentTimeMillis() - forArrayMillis) + "ms");
            // 2、用foreach循环遍历ArrayList
            long foreachArrayMillis = System.currentTimeMillis();
            for (String string : stringArrayList) {
                a = string;
            }
            System.err.println("用foreach循环遍历ArrayList,耗时:" + String.valueOf(System.currentTimeMillis() - foreachArrayMillis) + "ms");
            // 3、用for循环遍历LinkedList
            long forLinkedMillis = System.currentTimeMillis();
            for (int i = 0; i < 100000; i++) {
                a = stringLinkedList.get(i);
            }
            System.err.println("用for循环遍历LinkedList,耗时:" + String.valueOf(System.currentTimeMillis() - forLinkedMillis) + "ms");
            // 4、用foreach循环遍历LinkedList
            long foreachLinkedMillis = System.currentTimeMillis();
            for (String string : stringLinkedList) {
                a = string;
            }
            System.err.println("用foreach循环遍历LinkedList,耗时:" + String.valueOf(System.currentTimeMillis() - foreachLinkedMillis) + "ms");
        }
    
    }

    结果如下:

    本次测试工10W条数据

    通过控制台输出的结果可以看出,

      循环遍历ArrayList集合时,for和foreach的耗时时间差不多,多次测试可以发现,for循环效率比foreach的效率还要高一些;

      循环遍历LinkedList集合时,for循环的耗时明显高于foreach循环的耗时。

    结论:当遍历数组结构的集合时用for或者foreach都行

             (1、在固定长度或者长度不需要计算的时候for循环效率高于foreach;2、在不确定长度或者计算长度有损性能的时候用foreach比较方便--可以自己测试一下),

               当遍历链表结构的集合时一定不要用for循环。

    注:在《阿里巴巴Java开发手册终极版》有下面一条需要注意的

    可以测试一下,在 foreach 循环中 add/remove 集合元素,有时会抛出 ConcurrentModificationException 异常

  • 相关阅读:
    NLP概览(一)
    java正则表达式实例
    notepad++
    Mybatis点滴
    (转)GNU Make学习总结(二)
    (转)GNU Make学习总结(一)
    分页查询
    第三方插件
    单例模式读取数据库配置文件和JNDI连接数据源
    过滤器与监听器
  • 原文地址:https://www.cnblogs.com/java-spring/p/9264406.html
Copyright © 2020-2023  润新知