JAVA迭代器详解

1、Interable、Iterator和ListIterator

   1)迭代器生成接口Interable,用于生成一个具体迭代器

      public interface Iterable<T>{

           Interator<T> iterator();

       }

   2)迭代器接口Iterator,用于遍历集合和移除元素,只能向前移动

      public interface Iterator<T>{

          boolean hasNext();     //判断下一个元素是否存在

          T next();              //返回下一个元素

          void remove();         //移除元素

      }

   3)表迭代器ListIterator

    (1)继承了Iterator

    (2)可以双向移动

    (3)只能用于各种List类的访问

    (4)可获取当前元素的前后元素的索引

2、Collection的子类(接口)除了List外,都实现了Interable接口,但List的抽象子类AbstractList实现了Interable接口。

3、Collection的子类(接口)都没有实现Iterator接口。但是,Collection的子类重写Interable接口的iterator()方法时,使用匿名内部类的方式实现Iterator接口。例如:

     public Interator<T> interator(){

         return new Iterator<T>(){

             private int index = 0;

             public boolean hasNext(){ return indext < size;}  //size为集合元素的个数

             public T next(){ return array[index++];}  // array是存放元素的数组

             public void remove(){}   //不使用,就不需要实现

         }

     }

4、JAVA使用迭代器表示容器间的共性,而不是使用Collection。

5、Map及其子类没有实现Interable、Iterator

       但是,Map内部生成Collection,从而间接实现Iterable接口和生成Iterator,所以,Map也可以使用迭代器。

6、foreach与迭代器

  (1)foreach可用于数组和Collecton的所有对象

  (2)foreach可用来遍历集合的原因是:foreach用Iterable在序列中移动。因此,任何实现了Iterable类都可用foreach遍历。

  (3)foreach的java形式:for( :)