Java中的迭代器

通常,您将需要循环浏览集合中的元素。例如,您可能要显示每个元素。最简单的方法是使用迭代器,该迭代器是实现Iterator或ListIterator接口的对象。

迭代器使您可以循环浏览集合,获取或删除元素。ListIterator扩展了Iterator,以允许双向遍历列表以及修改元素。

您必须先获得一个,才能通过迭代器访问集合。每个集合类都提供一个iterator()方法,该方法将迭代器返回到集合的开头。通过使用此迭代器对象,您可以访问集合中的每个元素,一次访问一个元素。

通常,要使用迭代器循环浏览集合的内容,请按照以下步骤操作:

  • 通过调用集合的iterator()方法,获得一个到集合开始处的迭代器。

  • 设置一个调用hasNext()的循环。只要hasNext()返回true,就使循环迭代。

  • 在循环中,通过调用next()获得每个元素。

对于实现List的集合,您还可以通过调用ListIterator获得一个迭代器。

迭代器声明的方法

序号方法与说明
1boolean hasNext()
如果有更多元素,则返回true。否则,返回false。
2Object next()
返回下一个元素。如果没有下一个元素,则抛出NoSuchElementException。
3void remove()
删除当前元素。如果尝试调用remove()而不是调用next()之前,则抛出IllegalStateException。

ListIterator声明的方法

序号方法与说明
1void add(Object obj)将obj
插入到元素的列表中,该元素将由下次调用next()返回。
2boolean hasNext()
如果存在下一个元素,则返回true。否则,返回false。
3boolean hasPrevious()
如果存在上一个元素,则返回true。否则,返回false。
4Object next()
返回下一个元素。如果没有下一个元素,则抛出NoSuchElementException。
5int nextIndex()
返回下一个元素的索引。如果没有下一个元素,则返回列表的大小。
6对象previous()
返回上一个元素。如果没有上一个元素,则抛出NoSuchElementException。
7int previousIndex()
返回上一个元素的索引。如果没有上一个元素,则返回-1。
8void remove()
从列表中删除当前元素。如果在调用next()或previous()之前调用remove(),则抛出IllegalStateException。
9set(Object obj)将obj
分配给当前元素。这是上一次调用next()或previous()返回的元素。

示例

这是同时演示Iterator和ListIterator的示例。它使用ArrayList对象,但是一般原则适用于任何类型的集合。

当然,ListIterator仅适用于实现List接口的那些集合。

import java.util.*;
public class IteratorDemo {

   public static void main(String args[]) {
      //创建一个数组列表
      ArrayList al = new ArrayList();

      //将元素添加到数组列表
      al.add("C");
      al.add("A");
      al.add("E");
      al.add("B");
      al.add("D");
      al.add("F");

      //使用迭代器显示al的内容
      System.out.print("Original contents of al: ");
      Iterator itr = al.iterator();

      while(itr.hasNext()) {
         Object element = itr.next();
         System.out.print(element + " ");
      }
      System.out.println();

      //修改要迭代的对象
      ListIterator litr = al.listIterator();

      while(litr.hasNext()) {
         Object element = litr.next();
         litr.set(element + "+");
      }
      System.out.print("Modified contents of al: ");
      itr = al.iterator();

      while(itr.hasNext()) {
         Object element = itr.next();
         System.out.print(element + " ");
      }
      System.out.println();

      //现在,向后显示列表
      System.out.print("Modified list backwards: ");

      while(litr.hasPrevious()) {
         Object element = litr.previous();
         System.out.print(element + " ");
      }
      System.out.println();
   }
}

这将产生以下结果-

输出结果

Original contents of al: C A E B D F
Modified contents of al: C+ A+ E+ B+ D+ F+
Modified list backwards: F+ D+ B+ E+ A+ C+