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循环效率对比问题的主要内容,如果未能解决你的问题,请参考以下文章