java iterator模式通过职责分离实现遍历与集合解耦:集合专注存储,迭代器封装遍历逻辑;统一接口屏蔽底层差异;支持多策略遍历且集合无需修改;严格约束接口仅暴露hasnext()和next(),杜绝结构泄露。

Java 中 Iterator 迭代器模式通过“职责分离”实现遍历行为与集合底层结构的解耦:集合只管存数据,迭代器只管走逻辑,两者不互相依赖、不暴露实现细节。
用统一接口屏蔽内部差异
所有集合(ArrayList、LinkedList、HashSet、TreeSet 等)都实现 Iterator
- ArrayList 是用数组索引遍历
- LinkedList 是靠 next 指针跳转
- HashSet 是遍历哈希桶+链表/红黑树
- TreeSet 是中序遍历红黑树
只要拿到 Iterator 实例,写一套 while 循环就能通吃所有集合类型。
把“怎么走”从集合里抽出来
每个具体集合类(如 ArrayList)内部不写 for 循环逻辑,而是提供 iterator() 方法,返回一个专属的具体迭代器(如 ArrayList.Itr)。这个迭代器:
- 持有对集合内部状态的弱引用(如数组引用 + 游标 index)
- 封装了全部遍历细节:如何定位下一个元素、何时结束
- 不向外暴露数组、指针、桶、节点等实现字段
这样集合类本身就能专注扩容、增删、哈希计算等存储职责,彻底甩掉遍历包袱。
支持多套遍历策略而不改集合
同一份数据,可以按需提供不同迭代器,且集合类完全无感:
- ArrayList 可同时提供正向 Itr 和逆向 ListIterator
- TreeSet 可提供前序、中序、后序三种 ConcreteIterator
- 自定义树形索引可返回 InorderIterator、LevelOrderIterator
新增一种遍历方式,只需新增一个迭代器实现类,集合类不用动一行代码,也不影响已有调用方。
禁止外部直接访问底层结构
真正解耦的关键,在于约束设计边界:
- 集合接口(如 Collection、Iterable)不提供 get(int)、toArray()、values() 等暴露结构的方法
- 内存数据库索引等场景中,明确禁用 entrySet()、keySet() 等快照方法,只暴露 iterator()
- 外部组件拿到的永远是 Iterator
,不是 List 或 Map —— 没有结构,只有序列
没有索引、没有指针、没有桶号,只有“有没有下一个”和“取下一个”,这才是解耦的完成态。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











