zoukankan      html  css  js  c++  java
  • 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 异常

  • 相关阅读:
    表达式计算 六月飞雪
    code::blocks 单步执行 六月飞雪
    5.1 字符串 六月飞雪
    对使用倒序的一维数组解决0/1背包问题的理解 六月飞雪
    5.2 高精度运算 六月飞雪
    关于ArcEngine“不能再打开其他表了”的错误 (20121026 15:43:33)
    关于AO插入对象
    多线程使用实例
    C#程序运行时间长出现无法响应状态
    Geographic coordinate system和projected coordinate
  • 原文地址:https://www.cnblogs.com/java-spring/p/9264406.html
Copyright © 2011-2022 走看看