Iterator 本身没有 removeIf 方法,该方法属于 Collection 接口;需用 iterator.remove() 手动实现:先获取迭代器,遍历中对满足条件元素调用 it.remove(),且必须紧跟 next() 后调用。

Java 中不能直接用 Iterator “替换” removeIf,但可以用 Iterator 的 remove() 方法手动实现相同效果——即安全地在遍历过程中删除满足条件的元素。
为什么不能直接用 Iterator 调用 removeIf
removeIf 是 Collection 接口定义的方法(如 ArrayList、LinkedList 都有),它内部已封装了安全删除逻辑;而 Iterator 本身没有 removeIf 方法。试图调用 iterator.removeIf(...) 会编译失败。
用 Iterator 手动实现 removeIf 的等效逻辑
核心是:获取迭代器 → 遍历 → 对每个元素判断条件 → 满足则调用 iterator.remove()。
注意:必须用迭代器自己的 remove(),不能用集合的 remove(),否则抛 ConcurrentModificationException。
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
立即学习“Java免费学习笔记(深入)”;
- 先调用
collection.iterator() - 在
while (it.hasNext())循环中,用it.next()获取元素 - 对元素做条件判断(比如
item % 2 == 0) - 若条件成立,立即调用
it.remove()
代码示例:删除偶数
对比写法:
使用 removeIf(简洁推荐):
list.removeIf(x -> x % 2 == 0);等效的 Iterator 写法(需手动控制):
Iterator<Integer> it = list.iterator();while (it.hasNext()) {
Integer x = it.next();
if (x % 2 == 0) {
it.remove();
}
}
注意事项
-
it.remove()只能紧跟在一次next()之后调用,否则抛IllegalStateException - 不支持在 for-each 循环中调用
remove()—— for-each 底层用的就是 iterator,但隐藏了引用,无法访问 - 如果需要删除多个不同条件的元素,Iterator 方式更灵活(可嵌套判断或提前 break),而
removeIf仅接受一个 Predicate

















