Java 循环里怎么删除元素才安全
首先
在 Java 中,当你在循环中遍历集合时,直接删除元素可能会引发 ConcurrentModificationException
。为了安全地删除元素,推荐使用 Iterator
来进行删除操作。
以下是使用 Iterator
删除元素的常见模式:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
// 使用 Iterator 安全删除元素
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
Integer value = iterator.next();
if (value % 2 == 0) { // 删除偶数元素
iterator.remove();
}
}
System.out.println(list); // 输出: [1, 3]
}
}
关键点:
- 使用
Iterator
的remove()
方法删除元素,而不是直接使用List
的remove()
方法。 - 在
for-each
循环中无法使用Iterator.remove()
,必须显式地使用Iterator
进行遍历和删除操作。
Java 8+ 的 Stream API 方案:
你也可以使用 Stream API 来过滤出你需要的元素,间接实现删除效果:
list = list.stream()
.filter(value -> value % 2 != 0) // 保留奇数元素
.collect(Collectors.toList());
System.out.println(list); // 输出: [1, 3]
这种方法不会在遍历中直接删除元素,而是创建一个新的过滤后的集合。