正文
long end = System.currentTimeMillis();
Log.v("zxy","fori花费:"+(end-start));
start = System.currentTimeMillis();
for (Integer integer : data) {
}
end = System.currentTimeMillis();
Log.v("zxy","foreach花费:"+(end-start));
Iterator
iterator = data.iterator();
start = System.currentTimeMillis();
while (iterator.hasNext()){
iterator.next();
}
end = System.currentTimeMillis();
Log.v("zxy","iterator花费:"+(end-start));
11-19 09:11:44.276 1418-1418/? V/zxy: fori花费:30
11-19 09:11:44.380 1418-1418/? V/zxy: foreach花费:105
11-19 09:11:44.476 1418-1418/? V/zxy: iterator花费:95
而通常我们所说的效率高的foreach在遍历上却显得不如意,而fori效率表现的最好,这是因为ArrayList和Vector集合内部实现由数组实现,所以随机访问的速度是很快的,对于可以进行随机访问的List,JDK为它们实现了RandomAccess接口,表示支持快速随机访问。
而在遍历有1w条数据的LinkedList集合时:
11-19 09:33:23.984 1737-1737/? V/zxy: fori花费:351
11-19 09:33:23.988 1737-1737/? V/zxy: foreach花费:2
11-19 09:33:23.992 1737-1737/? V/zxy: iterator花费:4
则foreach表现最佳,所以对数组、或者实现了RandomAccess接口的List,遍历用fori性能最佳,对LinkedList等以链表实现的集合遍历时使用foreach或者iterator性能最佳,因为foreach的实现就是通过iterator实现的。
我们可以这样判断该List遍历用哪种方式: