iterator是java遍历集合的标准方式,安全通用且支持遍历时删除元素;需通过hasnext()判断、next()获取元素,remove()须紧跟next()后调用以安全删除。

Java 中 Iterator 是遍历集合的标准方式,安全、通用,且支持遍历时删除元素。
Iterator 基本用法
所有 Collection 实现类(如 ArrayList、HashSet、LinkedList)都提供 iterator() 方法返回一个 Iterator 对象。使用它需三步:获取迭代器 → 循环检查是否有下一个元素 → 获取当前元素。
- 调用 hasNext() 判断是否还有未访问元素,返回 boolean
- 调用 next() 返回下一个元素,并将内部指针后移
- 不能在没调用 hasNext() 的情况下直接调用 next(),否则可能抛出 NoSuchElementException
典型遍历代码示例
以 ArrayList 为例:
List<string> list = Arrays.asList("a", "b", "c");
Iterator<string> it = list.iterator();
while (it.hasNext()) {
String item = it.next();
System.out.println(item);
}</string></string>
输出为 a、b、c,顺序与插入一致(对 List 有效;Set 不保证顺序)。
遍历时安全删除元素
普通 for 循环或增强 for(for-each)中直接调用集合的 remove() 会抛 ConcurrentModificationException。而 Iterator 提供了线程安全的删除方式:
- 必须先调用 next(),再调用 remove()
- remove() 只能调用一次,且必须紧跟在 next() 之后
- 它删除的是上一次 next() 返回的那个元素
例如删除所有长度为 1 的字符串:
Iterator<string> it = list.iterator();
while (it.hasNext()) {
String s = it.next();
if (s.length() == 1) {
it.remove(); // 安全删除
}
}</string>
注意点和常见误区
Iterator 是**单向、只读向前**的,不支持回退或索引访问。
- 不同集合的 Iterator 行为不同:ArrayList 迭代器是 fail-fast(快速失败),并发修改会立即报错;ConcurrentHashMap 的迭代器则弱一致性,不抛异常但可能看不到最新修改
- Iterator 本身不是线程安全的,多线程环境下需额外同步
- 增强 for 循环底层就是用 Iterator 实现的,所以它也不能在循环中直接修改集合结构
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











