请问一下 遍历ArrayList的时候 
for循环和Iterator有什么区别 
可否详细点

解决方案 »

  1.   

    另外Iterator即迭代器,可以实现不经重写就能同各种容器一同工作,能让客户程序员在不知道,不关心他所处理的是什么样的底层序列结构情况下就能在一个对象序列中前后移动,选取其中对象也就是说无论是arraylist或别的,使用Iterator的情况下不用去关心
      

  2.   

    个人理解就是for从里面来看,iterator 从外面来看
    iterator可以不用关心里面是怎么得到下一个的,可以很复杂
    但是iterator一般用链表实现,可能性能相对低一点点
      

  3.   

    用迭代器你可以不用知道arraylist中的结构,隐藏了一些东西
      

  4.   

    public static int mytst(Collection c)
    {
          Iterator itr = c.iterator();
          while(itr.hasNext())
          {
             ...
          }
             
          for(Iterator itr1 = c.iterator(); itr.hasNext(); )
          {
             ...
          }
    }
    两者没有本质区别
      

  5.   

    使用 foreach 循环就更好了,既清楚,又好理解。
      

  6.   

    当然有区别,使用Iterator其实是在使用迭代器模式。在你现在的这个例子中,可以实际的获取到你的集合数据结构,但是如果你写了一个方法供别人
    比如 List getAList() {
      list.add("a");
      list.add("b");
    return list;//假如list是实例变量。
    }这样的话,别人再获得list对象后,可以再add内容,这样就会影响到你的list。
    因此,上面的方法需要改为:List getAList() {
      list.add("a");
      list.add("b");
    return list.clone();//假如list是实例变量。
    }上面的方法有如下问题:
    (1)使用clone,clone是一个费时的操作,并且往往容易出错。
    (2)向你的API使用者提供了你的内部实现,如果以后你要把List改为Set,你对你的用户来说,你的API是失败的,别说增加一个方法getASet.这时候,就可以把方法写成:Iterator getAIterator() {
      list.add("a");
      list.add("b");
    return list.iterator;//假如list是实例变量。
    }
      

  7.   

    针对不同的数据集,由于其实现方式的不同,可能造成在根据索引查找数据时在性能上造成很重大的差异。如基于数组索引的ArrayList和基于链表的LinkedList。同是List,但是在类似get(0)这样的操作上的性能差异是非常大的。LinkedList会慢很多。
    而迭代器则是为解决这个问题而产生的,它提供了一种通用的最简单和相对优化的方式遍历数据集。对于ArrayList,迭代器会用其效率高的根据索引取值,而针对LinkedList,则会直接取当前对象的下一个链接对象。
    所以,其实针对ArrayList,用for是相对更快的。但是Iterator则更加通用。