ArrayList lst=new ArrayList();
       lst.add("A");
       lst.add("B");
       lst.add("C");
       
       Iterator it=lst.iterator();
       while(it.hasNext())
       {
           System.out.println(it.next());
       }
       
       for(int i=0;i<lst.size();i++)
       {
           System.out.println(lst.get(i));
       }
       上面的程序中,用while跟用for的写法,出来的结果是一样的,但我很想知道两者有什么区别,我个人设想可能有效率上的问题,大家来说说。

解决方案 »

  1.   

    对于ArrayList来说第二种性能会好一些,减少了不必要的检查
    对于LinkedList来说,第二种是一个非常浪费时间的操作,第一种好一些。
      

  2.   

    对于没有实现RondomAccess的List最好不要使用get这样的随机访问方法
      

  3.   

    对于没有实现RondomAccess的List最好不要使用get这样的随机访问方法这句有点不解啊
      

  4.   

    对于没有实现RondomAccess的List最好不要使用get这样的随机访问方法这句有点不解啊
      

  5.   

    看next 的实现方法,我觉得第二种更好一些,因为它也是要通过get方法来获得的public Object next() {
                checkForComodification();
        try {
    Object next = get(cursor);
    lastRet = cursor++;
    return next;
        } catch(IndexOutOfBoundsException e) {
    checkForComodification();
    throw new NoSuchElementException();
        }
    }
      

  6.   

    不理解lst.get(i)为什么是随机访问方法?
      

  7.   

    对于LinkedList来说,它没有实现RondomAccess,因为它内部使用链表存储数据即,如果它已经存放了100个对象,当需要获得第35个的时候,它需要从第一个开始逐个向后查找,直到第35个为止(若大于50,LinkedList会从后面开始向前找)。这样可以看到get(35)是一个非常浪费时间的操作,而Iterator则不同,它是指向在第34个对象再向移动的,可以非常快速
    所以
    对于ArrayList来说第二种性能会好一些,减少了不必要的检查
    对于LinkedList来说,第二种是一个非常浪费时间的操作,第一种好一些。
      

  8.   

    to horseyet(horseyet)
    一般没有实现RondomAccess的List,get(int i)方法采取的是搜索查找 i,相反的,则直接返回内部存储的一维数组对象(即:return elementData[i])
      

  9.   

    文档上也有写到:As a rule of thumb, a List implementation should implement RandomAccess interface if, for typical instances of the class, this loop:      for (int i=0, n=list.size(); i < n; i++)
             list.get(i);
     
    runs faster than this loop:      for (Iterator i=list.iterator(); i.hasNext(); )
             i.next();路过,赶紧工作了..,LZ 保重.
      

  10.   

    星星们都出来了,呵。我个人同意ChDw(米)的说法,我觉得其实Iterator就是给那些没有索引的集合类用的,用于加快这些类型的查找定位,你看为什么ResultSet不用Iterator来循环呢,道理就是这样的。
      

  11.   

    这样可以看到get(35)是一个非常浪费时间的操作,而Iterator则不同,它是指向在第34个对象再向移动的,可以非常快速怎么定位到第34个对象呢?
      

  12.   

    对于list,还是用  Iterator it=lst.iterator();
           while(it.hasNext())
           {
               System.out.println(it.next());
           }
    这个好