迭代器模式提供一种统一遍历集合的方式,不暴露集合的内部结构。Java 的 Iterator、增强 for 循环就是它的落地。这篇讲清它解决什么、以及 Java 里怎么用。
一、解决什么问题:遍历方式不统一
不同的集合,内部结构不同(数组、链表、树),遍历方式也不同。客户端想遍历,得知道每个集合的内部结构,代码耦合。
迭代器模式:集合提供一个统一的迭代器,客户端只认迭代器的 hasNext/next,不关心内部结构。
二、核心结构
java
// 迭代器接口:统一的两个方法
interface Iterator<T> {
boolean hasNext();
T next();
}
// 集合接口:能返回迭代器
interface Aggregate<T> {
Iterator<T> iterator();
}
// 具体集合:内部是数组
class ArrayAggregate<T> implements Aggregate<T> {
private T[] items;
public Iterator<T> iterator() {
return new Iterator<T>() { // 内部类实现迭代器,知道怎么遍历数组
private int index = 0;
public boolean hasNext() { return index < items.length; }
public T next() { return items[index++]; }
};
}
}关键:遍历逻辑(怎么从第一个到最后一个)封装在迭代器里,客户端只调 hasNext/next,完全不知道集合内部是数组还是链表。
三、Java 里的迭代器
Java 集合框架原生支持迭代器:
java
List<String> list = new ArrayList<>(List.of("a", "b", "c"));
// 显式用迭代器
Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
// 增强 for 循环:底层就是迭代器
for (String s : list) {
System.out.println(s);
}Java 8 之后,日常更多用 forEach + lambda 或 Stream,但它们底层也是迭代器的思想。
四、核心价值
- 统一遍历:不同集合用同一种方式遍历
- 不暴露内部:客户端不知道集合是数组还是链表
- 解耦:遍历逻辑和集合本身分离
小结
- 迭代器统一集合的遍历方式,不暴露内部结构
- Java 落地:
Iterator、增强 for 循环 - 现代 Java 更多用 Stream/forEach,但思想同源
相关:《Java 集合框架详解》(了解各种集合的底层,才知道迭代器为什么重要)。
