Iterator 与 Iterable 是 Java 集合遍历的核心接口,Iterable 表示对象可被遍历,通过 iterator() 方法返回 Iterator 对象,Iterator 负责实际遍历操作,提供 hasNext()、next() 和 remove() 方法,二者关系如同“书本”与“读者”,实现 Iterable 可支持增强 for 循环,使用时需注意并发修改异常和 remove 调用时机。

在Java中,Iterator 和 Iterable 是集合框架中非常重要的两个接口,它们共同支持“遍历”操作。理解它们的作用和关系,有助于写出更清晰、安全的集合处理代码。
Iterable 接口:表示可被遍历的对象
一个类如果实现了 Iterable
Iterable 接口只有一个核心方法:
Iterator这个方法返回一个 Iterator 对象,用于实际的元素遍历。
立即学习“Java免费学习笔记(深入)”;
常见的实现了 Iterable 的类包括:
- ArrayList、LinkedList(List 接口的实现)
- HashSet、TreeSet(Set 接口的实现)
- HashMap 的 keySet()、values() 等视图
当你写这样的代码时:
for (String s : list) { ... }Java 实际上会自动调用 list.iterator() 获取迭代器,然后进行遍历。
Iterator 接口:执行具体遍历操作
Iterator 才是真正控制遍历过程的对象。它提供三个关键方法:
- boolean hasNext():判断是否还有下一个元素
- T next():获取下一个元素,并移动指针
- void remove()(可选):删除当前已遍历的最后一个元素
使用 Iterator 遍历集合的标准方式如下:
Iteratorwhile (it.hasNext()) {
String item = it.next();
System.out.println(item);
}
这种方式比手动索引更安全,尤其适用于 Set 这类不支持随机访问的集合。
Iterator 与 Iterable 的关系
两者的关系可以这样理解:
- Iterable 是“拥有遍历能力”的契约 —— 谁能被遍历
- Iterator 是“执行遍历动作”的工具 —— 如何一步步取元素
- Iterable 的 iterator() 方法创建并返回一个 Iterator 实例
你可以把 Iterable 想成一本书(可阅读),而 Iterator 是那个正在翻页的读者。
使用建议和注意事项
使用 Iterator 时注意以下几点:
- 在遍历过程中修改集合结构(如添加元素),除非使用 Iterator 自带的 remove() 方法,否则通常会抛出 ConcurrentModificationException
- remove() 方法必须在调用 next() 之后使用,否则会抛出 IllegalStateException
- 增强for循环底层依赖 Iterable,所以自定义类想支持 for-each,就必须实现 Iterable 接口
例如,你可以让自己的容器类支持遍历:
class MyContainer implements Iterablepublic Iterator
// 返回一个合适的 Iterator 实现
}
}
基本上就这些。掌握这两个接口,就能更好理解 Java 中集合遍历的机制,写出更健壮的代码。










