推荐用 iterator 遍历 arraylist 是因为它能安全删除元素,避免 concurrentmodificationexception;必须用 it.remove() 且需紧跟 next() 调用,不可重置、不支持反向遍历。

Java 中遍历 ArrayList 使用迭代器(Iterator)是最安全、最标准的方式之一,尤其适合在遍历过程中需要删除元素的场景,避免 ConcurrentModificationException 异常。
为什么推荐用 Iterator 遍历 ArrayList
直接用 for 循环或增强 for 循环(for-each)虽然简洁,但它们底层仍依赖迭代器;而显式使用 Iterator 可以更精细地控制遍历过程,尤其是调用 remove() 方法时——这是唯一能在遍历时安全删除当前元素的方式。
基本写法:获取并使用 Iterator
通过 list.iterator() 获取迭代器对象,再用 hasNext() 和 next() 配合循环:
- 调用
iterator()方法获得Iterator<e></e>实例 - 用
hasNext()判断是否还有下一个元素(返回boolean) - 用
next()获取当前元素并自动移动指针
示例代码:
ArrayList<string> list = new ArrayList(Arrays.asList("a", "b", "c"));
Iterator<string> it = list.iterator();
while (it.hasNext()) {
String item = it.next();
System.out.println(item);
}</string></string>
边遍历边删除:必须用 it.remove()
如果要在遍历中删除满足条件的元素,绝不能调用 list.remove(),否则会抛出并发修改异常。必须使用迭代器自身的 remove() 方法(它只能在调用 next() 之后立即调用一次):
- 先调用
next()定位到目标元素 - 再立刻调用
it.remove()删除该元素 - 重复此过程,无需重置迭代器
示例(删除所有长度为 1 的字符串):
Iterator<string> it = list.iterator();
while (it.hasNext()) {
String s = it.next();
if (s.length() == 1) {
it.remove(); // 安全删除
}
}</string>
注意点与常见误区
-
it.remove()必须紧跟在it.next()之后,且每个next()最多对应一次remove() - 迭代器是**单向、不可重置**的,遍历完需重新获取新迭代器
- 不支持反向遍历,如需倒序,请用
ListIterator(ArrayList 支持) - 增强 for 循环本质就是语法糖,编译后仍转为 Iterator,但它隐藏了 remove 能力,所以无法安全删除
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











