List 遍历方式-研究

本文对比了 Java 中 List 遍历的三种常见方式:直接遍历元素、使用 for-each 循环和使用 Iterator。通过实验发现,直接遍历元素的方式效率最低,而使用 for-each 循环和 Iterator 的方式效率相近。
今天看见网上有个List 遍历方式讨论贴见 http://pda158.iteye.com/blog/2158898

第一种方式遍历每次会生成句柄 所以比较慢,改进版代码如下:



import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ListTest {

public static void main(String[] args) {
List<String> list = new ArrayList<String>();
long t1,t2;
for(int j = 0; j < 800000; j++) {
list.add("aaaaaa" + j);
}
System.out.println("List first visit method:");

// t1=System.currentTimeMillis();
// for(String tmp:list) {
//// tmp;
// }
// t2=System.currentTimeMillis();
// System.out.println("List first visit Run Time:" + (t2 -t1) + "(ms)");
//
// System.out.println("List second visit method:");
// t1=System.currentTimeMillis();
// for(int i = 0; i < list.size(); i++) {
// String tmp = list.get(i);
// }
// t2=System.currentTimeMillis();
// System.out.println("List second visit Run Time:" + (t2 -t1) + "(ms)");
//
System.out.println("List Third visit method:");
Iterator<String> iter = list.iterator();
t1=System.currentTimeMillis();
while(iter.hasNext()) {
String tmp =iter.next();
}
t2=System.currentTimeMillis();
System.out.println(" List Third visit Run Time:" + (t2 -t1) + "(ms)");
System.out.println("Finished!!!!!!!!");
}
}

结果:
List first visit Run Time:35(ms)
List second visit Run Time:21(ms)
List Third visit Run Time:35(ms)

1 同样第二种方式快,因为它直接从List中取出数据
2 1,3方式差不多

解释:
1,3 方式,所以时间是差不多的
Java 中的 foreach 语法是 iterator(迭代器)的变形用法
for (Iterator<Integer> i = list.iterator(); i.hasNext();) {

1,2 方式比较

public E next() {
checkForComodification();
try {
E next = get(cursor);
lastRet = cursor++;
return next;
} catch (IndexOutOfBoundsException e) {
checkForComodification();
throw new NoSuchElementException();
}
}


在迭代器的 next() 方法中也出现了下标访问方式没有的 checkForComodification() 方法和 lastRet 变量赋值操作。这也就是通过 foreach 方式遍历耗时的原因。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值