Java中对于集合的遍历,我们常见4中遍历方式:
1.普通for循环;
2.foreach循环;
3.iterator循环:
4.while循环“
测试方法:用for循环给一个list添加500万个数字。然后用以上4种方法,计算每种使用的时间。 代码如下:
List<Integer> list=new ArrayList<Integer>();
for(int i=0;i<5000000;i++){//500万
list.add(i);
}
//第一种:for循环
long currTime = System.currentTimeMillis();//开始分析前的系统时间
for(int i=0;i<list.size();i++) {
list.get(i);
}
long t1 = System.currentTimeMillis();//开始分析前的系统时间
//第二种:foreach循环
for(Integer i:list) {
list.get(i);
}
long t2 = System.currentTimeMillis();
//第三种:迭代器
Iterator iter=list.iterator();
while(iter.hasNext()){
iter.next();
}
long t3 = System.currentTimeMillis();
//第四种:while循环
int i=0;
int size=list.size();
while(i<size){
list.get(i++);
}
long t4 = System.currentTimeMillis();
System.out.println("普通for循环时间:"+(t1-currTime));
System.out.println("foreach时间:"+(t2-t1));
System.out.println("迭代器时间:"+(t3-t2));
System.out.println("while循环时间:"+(t4-t3));
启动main方法:控制台输出:
可以看出来,效率最高的是普通和while循环,最差的foreach。
我们启动第二遍结果:
启动第三遍结果:
把list的内容添加到5000万级别再测试一遍:
可以总结结论:循环种while的效率最高,其次是普通FOR循环,然后是迭代器,用foreach在效率上确实是有好几倍的差距,怪不得阿里巴巴的开发手册,不建议员工使用。