List在日常编码中经常出现,记得从开始学Java时取List数据时就要求使用Iterator接口获取,听说是这样比较快.今天突然心血来潮想到测试下到底哪个方法更快,到底快多少.结果使用get方法取得的数据时间要比Iterator少很多.附测试代码供解答:package com.ccesun.client;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class IteratorTest {    /**
     * @param args
     */
    public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>(1000);
for(int i = 0; i < 1000; i++){
    list.add(i);
}
for(int i = 0; i < 10;){
    System.out.println("Test case:"+(++i));
    test(list);
}
    }    private static void test(List<Integer> list) {
Integer tmp = 0;
Iterator<Integer> its = null;
long st = System.currentTimeMillis();
for(int i = 0; i < 10000; i++){
    its = list.iterator();
    for(int j = 0; j < list.size(); j++){
tmp = its.next();
    }
}
long it = System.currentTimeMillis()-st;
for(int i = 0; i < 10000; i++){
    for(int j = 0; j < list.size(); j++){
tmp = list.get(j);
    }
}
long gt = System.currentTimeMillis()-st-it;
System.out.println("Iterator cost time:"+it);
System.out.println("Get cost time:"+gt);
    }}测试结果:Test case:1
Iterator cost time:297
Get cost time:171
Test case:2
Iterator cost time:297
Get cost time:172
Test case:3
Iterator cost time:250
Get cost time:172
Test case:4
Iterator cost time:250
Get cost time:172
Test case:5
Iterator cost time:250
Get cost time:172
Test case:6
Iterator cost time:234
Get cost time:188
Test case:7
Iterator cost time:234
Get cost time:188
Test case:8
Iterator cost time:234
Get cost time:172
Test case:9
Iterator cost time:250
Get cost time:172
Test case:10
Iterator cost time:250
Get cost time:172

解决方案 »

  1.   

    首先,你的测试有点小问题,测试performance的时候,不能把两个比较的东西一起先后运行。这样前者会对后者产生影响,比如前者消耗了大量内存,在后面的运行的时候,正好gc。
    当然,这个比较中get肯定更快。因为iterator.next()调用的还是get(i),并执行i++,而iterator在此基础上,还有更大的开销。比如ArrayList的iterator每次next都是在try-catch中的,还要检查是否有调用过remove,速度当然会慢。
      

  2.   

    先顶你一下。呵呵
    list里放点是int基本数据类型,如果放到是对象,会不会结果不一样呢?
      

  3.   

    List有ArrayList,LinkedListArrayList内部是数组,用索引访问当然快!