请解释 Java 中的迭代器(Iterator)接口,包括它的主要方法、工作原理以及它在集合框架中的作用。
考察说明
考查对 Java 集合框架中 Iterator 接口的理解,包括其基本方法、遍历机制和设计目的。
回答思路
- 【回答框架 1】Iterator 是 Java 集合框架中的一个接口,用于遍历集合中的元素。它提供了一种统一的方式来访问集合中的元素,而不需要知道集合的具体实现细节。其主要方法有三个:hasNext() 判断是否还有下一个元素,next() 返回下一个元素,remove() 移除当前元素。
- 【回答框架 2】Iterator 的工作原理是基于游标(cursor)的。当创建迭代器时,游标指向集合的第一个元素之前。每次调用 next() 时,游标前移并返回当前元素。hasNext() 用于检查游标之后是否还有元素。这种设计使得遍历过程安全且一致。
- 【回答框架 3】在集合框架中,Iterator 的作用是提供一种通用的遍历方式。所有 Collection 子类,如 List、Set 等,都实现了 iterator() 方法,返回各自的迭代器。这使得程序员可以用统一的代码遍历不同类型的集合,提高了代码的复用性和可维护性。
- 【回答框架 4】使用 Iterator 时需要注意快速失败行为。在迭代过程中,如果集合被结构性地修改(如添加或删除元素),迭代器会抛出 ConcurrentModificationException,以防止并发修改导致的不一致。这种行为基于 modCount 计数器。
- 【回答框架 5】与增强 for 循环相比,Iterator 更灵活,因为可以在遍历过程中移除元素,而增强 for 循环不支持直接移除。此外,Iterator 也支持遍历过程中进行更精细的控制,如跳过元素等。
- 【关键点 1】Iterator 接口核心方法:hasNext()、next()、remove()。
- 【关键点 2】基于游标工作,游标初始位于第一个元素前。
- 【关键点 3】所有 Collection 子类可通过 iterator() 方法获得迭代器。
- 【关键点 4】迭代过程中结构性修改会抛出 ConcurrentModificationException。
- 【关键点 5】Iterator 允许在遍历时安全移除元素,比增强 for 循环更灵活。
- 【易错点 1】调用 next() 前必须用 hasNext() 检查,否则可能抛出 NoSuchElementException。
- 【易错点 2】迭代器是一次性的,不能重置,如果需要重新遍历需重新创建。
- 【易错点 3】remove() 只能在调用 next() 之后调用一次,否则会抛出 IllegalStateException。