就是有些人循环用的是普通for循环,有些人用的是foreach循环,它们之间有什么区别?应该在何时使用这两种循环了?java
两种循环的语法格式:算法
普通for循环语法:数组
- for (int i = 0; i < integers.length; i++) {
- System.out.println(intergers[i]);
- }
foreach 循环语法:数据结构
- for(Integer in : integers){
- System.out.println(in);
- }
今天咱们来比较一下两种for循环对ArrayList和LinkList集合的循环性能比较。首先简单的了解一下ArrayList和LinkList的区别:性能
ArrayList:ArrayList是采用数组的形式保存对象的,这种方式将对象放在连续的内存块中,因此插入和删除时比较麻烦,查询比较方便。测试
LinkList:LinkList是将对象放在独立的空间中,并且每一个空间中还保存下一个空间的索引,也就是数据结构中的链表结构,插入和删除比较方便,可是查找很麻烦,要从第一个开始遍历。spa
下面是我测试的代码:.net
- public class Main {
-
- public static void main(String[] args){
-
- List<Integer> arrayList = new ArrayList<Integer>();
-
- List<Integer> linkList = new LinkedList<Integer>();
-
-
- for (int i = 0; i < 100000; i++) {
- arrayList.add(i);
- linkList.add(i);
- }
-
- int array = 0;
-
- long arrayForStartTime = System.currentTimeMillis();
- for (int i = 0; i < arrayList.size(); i++) {
- array = arrayList.get(i);
- }
- long arrayForEndTime = System.currentTimeMillis();
- System.out.println("用for循环arrayList 10万次花费时间:" + (arrayForEndTime - arrayForStartTime) + "毫秒");
-
-
- long arrayForeachStartTime = System.currentTimeMillis();
- for(Integer in : arrayList){
- array = in;
- }
- long arrayForeachEndTime = System.currentTimeMillis();
- System.out.println("用foreach循环arrayList 10万次花费时间:" + (arrayForeachEndTime - arrayForeachStartTime ) + "毫秒");
-
-
- long linkForStartTime = System.currentTimeMillis();
- int link = 0;
- for (int i = 0; i < linkList.size(); i++) {
- link = linkList.get(i);
- }
- long linkForEndTime = System.currentTimeMillis();
- System.out.println("用for循环linkList 10万次花费时间:" + (linkForEndTime - linkForStartTime) + "毫秒");
-
-
- long linkForeachStartTime = System.currentTimeMillis();
- for(Integer in : linkList){
- link = in;
- }
- long linkForeachEndTime = System.currentTimeMillis();
- System.out.println("用foreach循环linkList 10万次花费时间:" + (linkForeachEndTime - linkForeachStartTime ) + "毫秒");
- }
- }
循环10万次的时候,控制台打印结果: 对象
- 用for循环arrayList 10万次花费时间:5毫秒
- 用foreach循环arrayList 10万次花费时间:7毫秒
- 用for循环linkList 10万次花费时间:4481毫秒
- 用foreach循环linkList 10万次花费时间:5毫秒
能够看出,循环ArrayList时,普通for循环比foreach循环花费的时间要少一点;循环LinkList时,普通for循环比foreach循环花费的时间要多不少。blog
当我将循环次数提高到一百万次的时候,循环ArrayList,普通for循环仍是比foreach要快一点;可是普通for循环在循环LinkList时,程序直接卡死。
结论:须要循环数组结构的数据时,建议使用普通for循环,由于for循环采用下标访问,对于数组结构的数据来讲,采用下标访问比较好。
须要循环链表结构的数据时,必定不要使用普通for循环,这种作法很糟糕,数据量大的时候有可能会致使系统崩溃。