Java自定义集合遍历需实现Iterable接口并提供iterator()方法,内部类实现Iterator接口封装hasNext()、next()和remove()逻辑,支持for-each及手动迭代。

Java 中实现自定义集合的遍历,核心是让集合类实现 Iterable 接口,并提供一个返回 Iterator 的 iterator() 方法;而该 Iterator 通常由内部类实现,负责封装遍历逻辑。
1. 让自定义集合实现 Iterable 接口
这是启用 for-each 循环的前提。集合类必须重写 iterator() 方法,返回一个能遍历自身元素的迭代器对象。
- 接口要求只定义一个方法:
Iterator<t> iterator()</t> - 泛型
T应与集合存储的元素类型一致(如String、Integer) - 返回的
Iterator可以是匿名内部类、私有内部类或静态嵌套类
2. 实现 Iterator 接口(常用内部类方式)
标准做法是定义一个私有内部类,实现 Iterator<t></t> 接口,维护当前索引或节点引用,并实现三个关键方法:
-
hasNext():判断是否还有下一个元素(检查索引是否越界 / 节点是否为空) -
next():返回下一个元素,并移动内部指针;若无元素应抛NoSuchElementException -
remove()(可选):支持删除当前元素;若不支持,直接抛UnsupportedOperationException
例如,一个简单数组-backed 集合:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
public class MyList<t> implements Iterable<t> {
private final Object[] data;
private final int size;
public MyList(T... elements) {
this.data = elements;
this.size = elements.length;
}
@Override
public Iterator<t> iterator() {
return new MyIterator();
}
private class MyIterator implements Iterator<t> {
private int cursor = 0;
@Override
public boolean hasNext() {
return cursor
</t></t></t></t>3. 支持 for-each 和显式使用 Iterator
实现后,即可自然使用增强 for 循环,也可手动调用 iterator() 进行控制遍历:
for (String s : new MyList("a", "b", "c")) { ... }Iterator<string> it = list.iterator(); while (it.hasNext()) { String s = it.next(); ... }</string>
4. 注意线程安全与 fail-fast 行为(进阶)
如果集合允许并发修改,需考虑迭代器一致性:
- 单线程场景下,通常在
next()中检查modCount(类似ArrayList),不一致时抛ConcurrentModificationException - 若需线程安全,可用
CopyOnWriteArrayList思路,或加锁保护迭代过程 - 不打算支持快速失败,就无需维护修改计数,但需在文档中说明行为
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










