推荐用 Iterator 遍历 ArrayList 是因为其 remove() 方法能同步修改内部状态,避免 ConcurrentModificationException;而普通或增强 for 循环中调用集合的 remove() 会抛出该异常。

Java 中用 Iterator 遍历 ArrayList 是安全且标准的做法,尤其适合在遍历过程中需要删除元素的场景。
为什么推荐用 Iterator 而不是 for 循环?
直接用普通 for 或增强 for(for-each)遍历时调用 remove() 会抛出 ConcurrentModificationException。而 Iterator 的 remove() 方法是唯一安全的删除方式,它能同步修改集合的内部状态。
基本用法:获取 Iterator 并循环
调用 ArrayList.iterator() 获取迭代器,再用 hasNext() 和 next() 配合遍历:
- 先调用
iterator.hasNext()判断是否还有下一个元素 - 有则调用
iterator.next()获取当前元素并移动指针 - 不要连续调用两次
next(),否则会跳过元素
边遍历边安全删除元素
这是 Iterator 最关键的优势:
立即学习“Java免费学习笔记(深入)”;
- 必须在调用过
next()后才能调用remove() - 每次
remove()只删掉上一次next()返回的那个元素 - 不能在一次循环中多次调用
remove(),否则抛IllegalStateException
例如:删除所有偶数
ListIterator
while (it.hasNext()) {
Integer n = it.next();
if (n % 2 == 0) it.remove(); // 安全删除
}
注意点和常见误区
-
Iterator是**单向、只读向前**的,不支持后退或重置 - 不同线程同时修改集合时,
Iterator仍可能失效(非线程安全) - 若需反向遍历,改用
ListIterator(ArrayList.listIterator()) - 遍历中不要用集合自身的
add()、remove()等方法,只用Iterator.remove()


















