java中自定义集合遍历需实现iterable接口并重写iterator()方法返回新迭代器实例;内部类实现iterator的hasnext()、next()和remove();支持增强for循环,注意fail-fast机制及remove调用约束。

Java 中通过 Iterator 实现自定义集合的遍历,核心是让自定义集合类实现 Iterable 接口,并在其中返回一个实现了 Iterator 接口的对象。这样就能用增强 for 循环或手动调用 iterator() 遍历你的集合。
实现 Iterable 接口
自定义集合类(比如叫 MyList)必须实现 Iterable<e></e>,并重写 iterator() 方法,返回一个具体的迭代器实例:
- 泛型参数
E要和集合元素类型一致,保证类型安全 -
iterator()每次调用都应返回**新创建的迭代器对象**,避免多个循环共享状态导致异常
编写内部 Iterator 实现类
通常在集合类中定义一个私有静态或非静态内部类,实现 Iterator<e></e> 接口,重点实现三个方法:
-
hasNext():判断是否还有下一个元素,一般基于当前索引与集合大小比较 -
next():返回下一个元素,同时移动指针;若无元素应抛NoSuchElementException -
remove()(可选):实现删除逻辑,注意需配合next()调用,否则抛IllegalStateException
例如,一个简单数组-backed 的 MyList 可以用下标控制遍历位置,next() 返回 elements[index++]。
支持增强 for 循环
只要实现了 Iterable,就能直接使用 for (String s : myList) 语法。JVM 会自动调用 myList.iterator() 并执行标准迭代流程。无需额外配置或注解。
注意事项与常见问题
实际开发中容易忽略几个关键点:
- 迭代器应是**fail-fast**的:如果集合在迭代过程中被外部线程修改(如 add/remove),
next()应尽快抛ConcurrentModificationException(可通过维护modCount和expectedModCount实现) -
remove()方法默认不实现,若不需要可直接抛UnsupportedOperationException - 避免在
next()中做耗时操作,保持迭代轻量 - 如果集合支持多种遍历顺序(如倒序),可额外提供
descendingIterator()等方法,但不替代iterator()
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











