3.4 迭代器模式
迭代器模式(Iterator)提供一种方法,顺序访问一个聚合对象里的元素,而不暴露它的内部表示。无论底层是数组、链表、哈希表还是树,客户端都用同一套 hasNext() / next() 遍历。
这是日常编程里最“隐形”的模式——你每天写的 for (x : collection) 背后就是它。下面的实验让你点击 next() 推进游标,观察遍历状态如何在迭代器里保存。
正在加载交互实验...
把遍历从集合里分离出来
java
interface Iterator<T> {
boolean hasNext();
T next();
}
interface Iterable<T> {
Iterator<T> iterator(); // 集合负责生产迭代器
}关键点:遍历状态住在迭代器里,而不是集合里。这带来两个好处:
- 同一个集合可以同时有多个独立游标,互不干扰。
- 同一个集合可以提供多种迭代器(前序、中序、过滤迭代器……),遍历策略与数据结构解耦。
下面的实验用同一棵树,切换前序/中序/后序/层序,观察访问顺序如何变化——数据没变,只换了迭代器。
正在加载交互实验...
正在加载概念检查...
正在加载概念检查...
语言内建的迭代器
绝大多数现代语言都把迭代器做进了语言层:
- Java 的
Iterator/Iterable、增强 for;
- Python 的
__iter__/__next__、生成器yield;
- C++ 的
begin()/end()、C# 的IEnumerable。
所以你很少需要“从零手写”迭代器——但理解它能帮你为自定义数据结构正确实现遍历,也能让你看懂惰性序列、生成器、流(Stream)背后的统一抽象。
正在加载本节练习...