public static void main(String[] args) {
List<Object> list=new ArrayList<>();
//List<Object> list=new LinkedList<>();
long begin,end;
Object temp;
begin=System.currentTimeMillis();
for (int i = 0; i < 10000000; i++) {
list.add("第"+i+"个元素");
}
end=System.currentTimeMillis();
System.out.println("创建list耗时:"+(end-begin)+"ms");
System.out.println("---------------------");
/**
* foreach 方式
*/
begin=System.currentTimeMillis();
for (Object object : list) {
temp=object;
}
end=System.currentTimeMillis();
System.out.println("foreach耗时:"+(end-begin)+"ms");
System.out.println("---------------------");
/**
* 迭代器方式
*/
begin=System.currentTimeMillis();
Iterator<Object> iterator=list.iterator();
while (iterator.hasNext()) {
temp=iterator.next();
}
end=System.currentTimeMillis();
System.out.println("iterator耗时:"+(end-begin)+"ms");
System.out.println("---------------------");
/**
* 普通for循环
*/
begin=System.currentTimeMillis();
for (int i = 0; i <list.size(); i++) {
temp=list.get(i);
}
end=System.currentTimeMillis();
System.out.println("for耗时:"+(end-begin)+"ms");
System.out.println("---------------------");
}
添加10000000条测试数据,测试结果:
第一次运行:
创建list耗时:12767ms
---------------------
foreach耗时:30ms
---------------------
iterator耗时:27ms
---------------------
for耗时:7ms
---------------------
第二次运行:
创建list耗时:7959ms
---------------------
foreach耗时:28ms
---------------------
iterator耗时:26ms
---------------------
for耗时:7ms
---------------------
多次运行后,结果差别不大,foreach和iterator效率差不多,普通for循环效率最高。编译过程中,编译器将foreach循环体作为迭代器处理,二者完全等价,不过在foreach循环中,有一步不必要的赋值,导致效率比迭代器差一点,而for循环中,通过随机访问遍历列表,arraylist是基于数组实现的,所以随机访问的速度非常快,因此效率也非常高。所以遍历arraylist时,优先考虑for循环。
文章出处:http://blog.csdn.net/z694644032/article/details/68948775