Iterator遍历List最安全通用,尤其支持边遍历边删除;需用hasNext()和next()循环,删除必须调用it.remove()且须在next()后执行。

Java 中用 Iterator 遍历 List 最安全、最通用,尤其适合边遍历边删除元素的场景。
获取 Iterator 对象
List 接口继承自 Collection,所有实现类(如 ArrayList、LinkedList)都提供 iterator() 方法:
- 调用 list.iterator() 得到一个 Iterator 实例
- 该对象内部维护当前游标位置,初始指向第一个元素之前
用 hasNext() 和 next() 循环遍历
标准写法是 while 循环配合两个核心方法:
- hasNext():判断是否还有下一个元素,返回 boolean
- next():返回下一个元素,并将游标前移一位;若已无元素会抛出 NoSuchElementException
示例代码:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String item = it.next();
System.out.println(item);
}
安全删除元素(唯一推荐方式)
在遍历过程中直接调用 list.remove() 会触发 ConcurrentModificationException。正确做法是使用 Iterator 自带的 remove() 方法:
- 必须在调用过 next() 后才能调用 remove(),否则抛 IllegalStateException
- 每次 next() 后最多调用一次 remove(),重复调用也会报错
例如删除所有空字符串:
Iterator<String> it = list.iterator();
while (it.hasNext()) {
if (it.next().isEmpty()) {
it.remove(); // 安全删除
}
}
注意点和常见误区
- Iterator 是**单向、只读向前**的,不支持后退或重置(除非重新获取新对象)
- 它不保证线程安全,多线程环境下需额外同步
- 增强 for 循环(for-each)底层就是用 Iterator 实现的,但隐藏了 remove 能力,无法安全删元素

















