for循环与forEach循环效率对比问题

Posted ABin-阿斌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了for循环与forEach循环效率对比问题相关的知识,希望对你有一定的参考价值。

我是 ABin-阿斌:写一生代码,创一世佳话,筑一览芳华。 如果小伙伴们觉得我的文章不错,记得一键三连哦~

文章目录

声明:

  • 原作者:博客园:https://www.cnblogs.com/mxh-java/
  • 原文链接:https://www.cnblogs.com/mxh-java/p/11069719.html

测试for与froEach效率

public class TestList 
    public static void main(String[] args) 
        List<Integer> array = new ArrayList<Integer>();
        List<Integer> link = new LinkedList<Integer>();
         
        long startTime = 0;
        long endTime = 0;
         
        startTime=System.currentTimeMillis();
        for(int i=0; i<100000; i++) 
            array.add(i);
        
        endTime=System.currentTimeMillis();
        System.out.println("ArrayList add 花费时间: " + (endTime - startTime));
         
        startTime=System.currentTimeMillis();
        for(int i=0; i<100000; i++) 
            link.add(i);
        
        endTime=System.currentTimeMillis();
        System.out.println("LinkedList add 花费时间: " + (endTime - startTime));
         
        startTime=System.currentTimeMillis();
        for(int i=0; i<100000; i++) 
            array.get(i);
        
        endTime=System.currentTimeMillis();
        System.out.println("for 遍历  ArrayList get 花费时间: " + (endTime - startTime));
         
        startTime=System.currentTimeMillis();
        for(int i=0; i<100000; i++) 
            link.get(i);
        
        endTime=System.currentTimeMillis();
        System.out.println("for 遍历 LinkedList get 花费时间: " + (endTime - startTime));
         
        startTime=System.currentTimeMillis();
        for(int i : array) 
           
        
        endTime=System.currentTimeMillis();
        System.out.println("forEach 遍历  ArrayList get 花费时间: " + (endTime - startTime));
         
        startTime=System.currentTimeMillis();
        for(int i : link) 
           
        
        endTime=System.currentTimeMillis();
        System.out.println("forEach 遍历 LinkedList get 花费时间: " + (endTime - startTime));

		System.out.println("====================================================================");
        startTime = System.currentTimeMillis();
        array.forEach(var -> 

        );
        endTime = System.currentTimeMillis();
        System.out.println("Java8--forEach 遍历  ArrayList get 花费时间: " + (endTime - startTime));

        startTime = System.currentTimeMillis();
        link.forEach(var -> 

        );
        endTime = System.currentTimeMillis();
        System.out.println("Java8--forEach 遍历 LinkedList get 花费时间: " + (endTime - startTime));

    

执行后的结果

  • 从上图结果中可以看到效率排行,从高到低:foreach > java8-forEach > for

  • ArrayList: ArrayList 是采用数组的形式保存对象的,这种方式将对象放在连续的内存块中,所以插入和删除时比较麻烦,查询比较方便。

  • LinkList: LinkList 是将对象放在独立的空间中,而且每个空间中还保存下一个空间的索引,也就是数据结构中的链表结构,插入和删除比较方便,但是查找很麻烦,要从第一个开始遍历。

结论

  • 1万一内的数量,直接使用 foreach即可,如果超过1万那就是用 Java8–forEach

  • 需要循环数组结构的数据时,建议使用普通 for 循环,因为 for 循环采用下标访问,对于数组结构的数据来说,采用下标访问比较好

  • 需要循环链表结构的数据时,一定不要使用普通 for 循环,这种做法很糟糕,数据量大的时候有可能会导致系统崩溃

参考

以上是关于for循环与forEach循环效率对比问题的主要内容,如果未能解决你的问题,请参考以下文章

c# for和foreach哪个执行效率

for 与forEach的区别

高薪程序员&面试题精讲系列18之for和foreach的区别原理,哪个效率更高?

for、forEach、map的性能对比

php中的for 和foreach性能对比

for、while、foreach性能比较