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 异常

  • 相关阅读:
    ACM题目————食物链
    ACM题目————Find them, Catch them
    hdu 1255 覆盖的面积 (线段树处理面积覆盖问题(模板))
    poj 3373 Changing Digits (DFS + 记忆化剪枝+鸽巢原理思想)
    hdu 3303 Harmony Forever (线段树 + 抽屉原理)
    hdu 2665 Kth number(划分树模板)
    poj 1348 Computing (四个数的加减乘除四则运算)
    hdu 1021 Fibonacci Again(找规律)
    HDU 1560 DNA sequence (IDA* 迭代加深 搜索)
    hdu 1560 DNA sequence(搜索)
  • 原文地址:https://www.cnblogs.com/java-spring/p/9264406.html
Copyright © 2011-2022 走看看