Java 迭代器

2025年4月7日 | 阅读 5 分钟

在 Java 中,Iterator 是 Java 游标之一。Java Iterator 是一个接口,用于逐一遍历 Java 对象组件的集合。自 Java 1.2 Collection 框架起,它就可以在 Java 编程语言中使用。它属于 java.util 包。

虽然 Java Iterator 是在 Java 1.2 中引入的,但它仍然不是遍历 Collection 对象元素的 oldest tool(最古老的方法)。Java 编程语言中最古老的 Iterator 是 Enumerator,它早于 Iterator。Java Iterator 接口继承了 Enumerator Iterator,最初用于遍历一些可访问的集合,如 ArrayLists。

Java Iterator 也被称为 Java 的通用游标,因为它适用于 Collection 框架的所有类。Java Iterator 还支持 READ 和 REMOVE 等操作。当我们比较 Java Iterator 接口与 enumeration iterator 接口时,可以说 Java Iterator 中可用的方法名称更精确且更易于使用。

Java Iterator 的优点

Java Iterator 因其众多优点而变得非常流行。Java Iterator 的优点如下:

  • 用户可以将这些迭代器应用于 Collection 框架的任何类。
  • 在 Java Iterator 中,我们可以同时使用读取和移除操作。
  • 如果用户在使用 for 循环,他们不能修改(添加/移除)Collection,而如果他们使用 Java Iterator,他们可以轻松地更新 Collection。
  • Java Iterator 被认为是 Collection API 的通用游标。
  • Java Iterator 中的方法名称非常简单易用。

Java Iterator 的缺点

尽管有许多优点,Java Iterator 也有各种缺点。Java Iterator 的缺点如下:

  • Java Iterator 仅支持向前迭代。简单来说,Java Iterator 是单向迭代器。
  • Java Iterator 不支持替换和添加新组件。
  • 在 CRUD 操作中,Java Iterator 不支持 CREATE 和 UPDATE 等操作。
  • 与 Spliterator 相比,Java Iterator 不支持并行遍历元素,这意味着 Java Iterator 只支持顺序迭代。
  • 与 Spliterator 相比,Java Iterator 不支持更可靠地遍历大量数据。

如何使用 Java Iterator?

当用户需要使用 Java Iterator 时,他们必须从他们想要遍历的对象集合中创建一个 Iterator 接口的实例。之后,接收到的 Iterator 会跟踪底层集合的组件,以确保用户遍历对象集合中的每个元素。

如果用户在遍历 Iterator 时修改了底层集合,那么 Iterator 通常会识别到这一点,并在下次用户尝试从 Iterator 获取下一个组件时抛出异常。

Java Iterator 方法

下图完美地展示了 Java Iterator 接口的类图。它包含总共四个方法:

  • hasNext()
  • next()
  • remove()
  • forEachRemaining()

forEachRemaining() 方法是在 Java 8 中添加的。让我们详细讨论每个方法。

  • boolean hasNext():此方法不接受任何参数。如果迭代中还有更多元素,则返回 true。如果没有更多元素,则返回 false。
    如果迭代中没有更多元素,则无需调用 next() 方法。简单来说,该方法用于确定是否应调用 next() 方法。
  • E next(): 它类似于 hasNext() 方法。它也不接受任何参数。它返回 E,即遍历中的下一个元素。如果迭代或对象集合没有更多元素可供迭代,则会抛出 NoSuchElementException。
  • default void remove(): 此方法也不需要任何参数。此方法没有返回类型。此方法的主要功能是移除迭代器遍历底层集合时返回的最后一个元素。remove() 方法最多只能在调用 next() 方法一次后请求一次。如果迭代器不支持 remove 操作,则会抛出 UnsupportedOperationException。如果 next 方法尚未调用,它还会抛出 IllegalStateException。
  • default void forEachRemaining(Consumer action): 它是 Java Iterator 中唯一接受参数的方法。它接受 action 作为参数。Action 是要执行的操作。该方法没有返回类型。此方法对集合中所有剩余的组件执行特定操作,直到所有组件被消耗或 action 抛出异常。由 action 抛出的异常会传递给调用者。如果 action 为 null,则抛出 NullPointerException。

Java Iterator 示例

现在是时候执行一个 Java 程序来演示 Java Iterator 接口的优势了。下面的代码创建了一个城市名称的 ArrayList。然后我们使用 ArrayList 的 iterator() 方法初始化一个迭代器。之后,遍历列表以显示每个元素。

示例

编译并运行

输出

CityNames elements: 
Delhi Mumbai Kolkata Chandigarh Noida

注意事项

  • Java Iterator 是在 Java 1.2 Collection 框架的 Java 编程语言中添加的一个接口。它属于 java.util 包。
  • 它是用于遍历 Collection 框架对象的 Java Cursors 之一。
  • Java Iterator 用于逐一迭代 Collection 对象的组件。
  • Java Iterator 也被称为 Java 的通用游标,因为它适用于 Collection 框架的所有类。
  • Java Iterator 还支持 READ 和 REMOVE 等操作。
  • 与 Enumeration Iterator 相比,Iterator 类的方法名称非常简单易用。

下一主题Java Deque