Iterator
是 Java 集合框架中用于遍历集合元素的一种机制,位于 java.util
包中。它为集合提供了一种通用的迭代方式,无需了解集合的底层实现细节。
1. Iterator 的概述
-
什么是迭代器?
- 迭代器是一种设计模式,用于逐一访问集合中的元素,而无需暴露集合的内部结构。
- 它是 Java 集合框架中
Collection
接口的子接口(如List
、Set
、Queue
等)默认提供的迭代方式。
-
Iterator 的主要功能:
- 遍历集合元素。
- 在遍历时安全地从集合中删除元素。
2. Iterator 的类声明
Iterator
是一个接口,定义如下:
public interface Iterator<E> {
boolean hasNext(); // 判断是否还有下一个元素
E next(); // 返回下一个元素
void remove(); // 删除当前元素(可选操作)
}
3. Iterator 的常用方法
方法 | 描述 |
---|---|
boolean hasNext() |
判断集合中是否还有未遍历的元素,返回 true 或 false 。 |
E next() |
返回集合中的下一个元素。如果没有更多元素,会抛出 NoSuchElementException 。 |
void remove() |
从集合中删除迭代器上次返回的元素(可选操作)。 |
4. Iterator 的基本使用
4.1 遍历集合
以下是使用 Iterator
遍历集合的示例:
import java.util.ArrayList;
import java.util.Iterator;
public class IteratorExample {
public static void main(String[] args) {
// 创建集合
ArrayList<String> list = new ArrayList<>();
list.add("Alice");
list.add("Bob");
list.add("Charlie");
// 获取迭代器
Iterator<String> iterator = list.iterator();
// 使用迭代器遍历集合
while (iterator.hasNext()) {
String name = iterator.next();
System.out.println(name);
}
}
}
输出:
Alice
Bob
Charlie
4.2 删除集合中的元素
通过 Iterator
的 remove()
方法,可以在遍历时安全地删除集合中的元素。
import java.util.ArrayList;
import java.util.Iterator;
public class RemoveElementExample {
public static void main(String[] args) {
// 创建集合
ArrayList<String> list = new ArrayList<>();
list.add("Alice");
list.add("Bob");
list.add("Charlie");
// 获取迭代器
Iterator<String> iterator = list.iterator();
// 删除 "Bob" 元素
while (iterator.hasNext()) {
String name = iterator.next();
if (name.equals("Bob")) {
iterator.remove(); // 删除当前元素
}
}
System.out.println(list); // 输出: [Alice, Charlie]
}
}
5. Iterator 的注意事项
-
remove()
的使用规则:remove()
方法只能在调用next()
方法之后调用。- 如果没有调用
next()
或者多次调用remove()
,会抛出IllegalStateException
。
示例:
Iterator<String> iterator = list.iterator(); iterator.remove(); // 抛出 IllegalStateException
-
ConcurrentModificationException:
- 如果在使用
Iterator
遍历集合的过程中,直接通过集合的方法(如add()
、remove()
- 如果在使用