首页 > 代码库 > java迭代器

java迭代器

  java迭代器Iterator用于依次访问集合中的元素,用于替代Enumeration。

  Iterator接口方法如下所示:

 1 public interface Iterator<E> { 2      boolean hasNext() ; 3        //   如果仍有元素可以迭代,则返回 true。  4  E next() ; 5          // 返回迭代的下一个元素。  6  void remove() ; 7          // 从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。  8  9 }10   

  通过反复调用next方法,可以逐个访问集合中的每个元素,但是,如果到达了集合的末尾,next方法将抛出一个NoSuchElementException异常,因此,在调用next方法之前要调用hasNext方法,如果迭代器对象还有多个共访问的对象,返回true。

  例如:

1 Iterator it=collection.iterator();2 while(it.hasNext()){3     Object obj=it.next();4 }

  集合元素被访问的顺序取决于集合类型。如果对ArrayList进行迭代,迭代器将从索引0开始,每迭代一次索引值加1;访问HashSet中的元素,元素会按照某种随机的顺序出现。

  java迭代器当前位置被认为是在两个元素之间,当调用next时,迭代器就越过下一个元素,并返回刚刚越过的那个元素的引用。查找操作与索引位置变更紧密相连,查找一个元素的唯一方法是next,在迭代器执行查找操作时,迭代器位置向前移动。

  Iterator接口的remove方法将删除上次调用next方法时返回的元素。remove方法与next方法相互依赖,如果调用remove方法之前没有调用next方法,将抛出IllegalStateException异常。

  Iterator有一个子接口ListIterator,用于访问有序集合如:LinkedList。

  ListIterator方法如下所示:

 1 public interface ListIterator<E> extends Iterator<E> { 2      void add(E e) ; 3            //   将指定的元素插入列表(可选操作)。  4      boolean hasNext() ; 5              // 以正向遍历列表时,如果列表迭代器有多个元素,则返回     true(换句话说,如果 next 返回一个元素而不是抛出异常,则返回 true)。  6      boolean hasPrevious() ; 7             //  如果以逆向遍历列表,列表迭代器有多个元素,则返回 true。  8      E next() ; 9              // 返回列表中的下一个元素。 10      int nextIndex() ;11             //  返回对 next 的后续调用所返回元素的索引。 12      E previous() ;13                //   返回列表中的前一个元素。 14      int previousIndex() ;15           //    返回对 previous 的后续调用所返回元素的索引。 16      void remove() ;17             //  从列表中移除由 next 或 previous 返回的最后一个元素(可选操作)。 18  void set(E e) ;19       //    用指定元素替换 next 或 previous 返回的最后一个元素(可选    操作)。 20 }    

  ListIterator接口可以前后遍历集合中的元素,并可以添加,删除元素。当添加元素时,元素添加到当前迭代器位置之前。删除元素与next,previous紧密关联,调用remove方法之前,必须先调用next或previous方法。

  

 

java迭代器