package Test;import java.util.ArrayList;
import java.util.Iterator;public class IteratorTime {
    public static void main(String[] args){
        final int LENGTH = 10;
        ArrayList list = new ArrayList();
        
        for(int i = 0; i < LENGTH; i++){
            list.add(i, new Integer(i));
        }
        System.out.println("the size of ArrayList is " + LENGTH);
        long start = System.currentTimeMillis();
        int length = list.size();
        for(int i = 0; i < length; i++){
            //System.out.print(list.get(i).toString()+"\t");
        }
        long end = System.currentTimeMillis();
        System.out.println("内部遍历用时:" + (end-start) + "ms");
        
        //System.out.println("");
        start = System.currentTimeMillis();
        Iterator it = list.iterator();
        while(it.hasNext()){
            it.next();
            //System.out.print(it.next().toString()+"\t");
        }
        end = System.currentTimeMillis();
        System.out.println("Iterator遍历用时:" + (end-start) + "ms");
    }
}

解决方案 »

  1.   

    the size of ArrayList is 10: 
    内部遍历用时:0ms
    Iterator遍历用时:0msthe size of ArrayList is 100: 
    内部遍历用时:0ms
    Iterator遍历用时:0msthe size of ArrayList is 10000: 
    内部遍历用时:0ms
    Iterator遍历用时:10msthe size of ArrayList is 100000: 
    内部遍历用时:0ms
    Iterator遍历用时:20msthe size of ArrayList is 1000000: 
    内部遍历用时:0ms
    Iterator遍历用时:120ms
    你大约可以看出差距
      

  2.   

    上面的不对,sorry,我太不小心了。
      

  3.   

    package Test;import java.util.ArrayList;
    import java.util.Iterator;public class IteratorTime {
        public static void main(String[] args){
            final int LENGTH = 1000000;
            ArrayList list = new ArrayList();
            
            for(int i = 0; i < LENGTH; i++){
                list.add(i, new Integer(i));
            }
            System.out.println("the size of ArrayList is " + LENGTH + ": ");
            long start = System.currentTimeMillis();
            int length = list.size();
            for(int i = 0; i < length; i++){
                list.get(i);
                //System.out.print(list.get(i).toString()+"\t");
            }
            long end = System.currentTimeMillis();
            System.out.println("内部遍历用时:" + (end-start) + "ms");
            
            //System.out.println("");
            start = System.currentTimeMillis();
            Iterator it = list.iterator();
            while(it.hasNext()){
                it.next();
                //System.out.print(it.next().toString()+"\t");
            }
            end = System.currentTimeMillis();
            System.out.println("Iterator遍历用时:" + (end-start) + "ms");
        }
    }
      

  4.   

    This is a Testthe size of ArrayList is 10: 内部遍历用时:0msIterator遍历用时:0ms
    the size of ArrayList is 100: 内部遍历用时:0msIterator遍历用时:0ms
    the size of ArrayList is 1000: 内部遍历用时:0msIterator遍历用时:0ms
    the size of ArrayList is 10000: 内部遍历用时:0msIterator遍历用时:0ms
    the size of ArrayList is 100000: 内部遍历用时:0msIterator遍历用时:21ms
    the size of ArrayList is 1000000: 内部遍历用时:50msIterator遍历用时:120ms
      

  5.   

    楼上的测试证明内部遍历比Iterator遍历快.
    可是我看到一篇贴子,认为" for(int i=0;i<l.size();i++) {obj = l.get(i); }"的遍历方式性能奇差无比,而主张使用"for(Iterator it = l.iterator();it.hasNext();) {  obj = it.next(); }(这里,可能你写的更好些)".初学编程,不要见笑.
      

  6.   

    如果是JDK 1.5  
    http://www-900.ibm.com/developerWorks/cn/java/j-forin.shtml
    也许没有多大用处..
      

  7.   

    晕死!
    1.首先楼上的测试没有意义:
      for(int i=0;i<list.size();i++){}
      这个实际上就是 for(int i=0;i<100;i++){} 根本就没有遍历
      遍历至少要读取所有的数据,而这个循环只占用小部分时间.
      举个例子说明,两个运动员长跑,第一个运动可能热身只要1分钟,第二个运动员要10分钟.
      而长跑完第一个运动员要4个小时,第二个运动员要5个小时,难道可以只比较热身的时间?2.对于ArrayList for(int i=0;i<list.size();i++)遍历比用Iterator确实要快,看过代码你就知道
      Iterator中的next其实就是调用了get(i),但是效率不会差很多,基本上可以认为效率相当.
      所以使用这两种方式都无可厚非,不过我喜欢用get(i)方法.
      

  8.   

    如果一个list没有实现RandomAccess,则可能表示get(i)会效率很低
    如果像ArrayList之类的的确没有必要使用Iterator
      

  9.   

    看错了,上面的测试完全不对,对于数组遍历完全没有遍历
    对于叠代时间完全花在next()上,是整整的遍历.一个遍历了,一个没有遍历,怎么比?奇怪楼上的测试结果你们竟然都不怀疑?
      

  10.   

    get()方法只是取数组的元素
    next()方法是get()+checkForComodification(),难道是因为调用了checkForComodification()(该方法是非常简单的咚咚,只是判断是否抛异常)?在list够大的时候,每次调用该方法肯定会浪费时间.我的理解是next()比get()方法在处理上至少多了一条寻址指令(当然寻址后还会处理该方法),积少成多,达到一定级别后,消耗的时间就会体现出来
      

  11.   

    我的测试结果是:(是在 JB8里面测试的 )
    the size of ArrayList is 1000000: 内部遍历用时:330msIterator遍历用时:170ms
      

  12.   

    对于ArrayList
    get访问无论如何都会比Iterator快一点点,任何测试都是没有意义的.
      

  13.   

    看样子可能是FOR循环比Iter快!