Java 中的迭代器

java programming java 8object oriented programming

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

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

在通过迭代器访问集合之前,您必须先获取一个迭代器。每个集合类都提供了一个 iterator() 方法,该方法返回一个指向集合开头的迭代器。通过使用此迭代器对象,您可以访问集合中的每个元素,一次一个。

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

  • 通过调用集合的 iterator() 方法获取指向集合开头的迭代器。

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

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

对于实现了 List 接口的集合,还可以通过调用 ListIterator 获取迭代器。

Iterator 声明的方法

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

ListIterator 声明的方法

Sr.No.方法 &说明
1void add(Object obj)
将 obj 插入到列表中,位于下次调用 next( ) 将返回的元素前面。
2boolean hasNext( )
如果有下一个元素,则返回 true。否则,返回 false。
3boolean hasPrevious( )
如果有前一个元素,则返回 true。否则,返回 false。
4Object next( )
返回下一个元素。如果没有下一个元素,则会抛出 NoSuchElementException 异常。
5int nextIndex()
返回下一个元素的索引。如果没有下一个元素,则返回列表的大小。
6Object previous()
返回上一个元素。如果没有上一个元素,则会抛出 NoSuchElementException 异常。
7int previousIndex()
返回上一个元素的索引。如果没有前一个元素,则返回 -1。
8void remove()
从列表中移除当前元素。如果在调用 next() 或 previous() 之前调用 remove(),则会抛出 IllegalStateException。
9void set(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("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+

相关文章