使用foreach的remove会出现ConcurrentModificationException吗
时间: 2024-09-18 08:10:56 浏览: 28
java 使用foreach遍历集合元素的实例
5星 · 资源好评率100%
在Java中,`foreach`循环通常用于遍历集合的元素,它并不会直接提供修改集合的操作。如果你尝试在`for-each`循环中调用`remove()`方法删除元素,尤其是对`ArrayList`或`LinkedList`这样的实现了`RandomAccess`接口的列表,会抛出`ConcurrentModificationException`。这是因为在遍历过程中直接修改集合是不允许的,因为这可能导致并发访问异常。
为了避免这种异常,你应该先创建一个新的集合来存储需要保留的元素,然后在`foreach`外部完成移除操作,或者使用迭代器(Iterator)来进行安全的遍历并删除元素:
```java
List<String> list = ...;
List<String> newList = new ArrayList<>();
for (String item : list) {
if (/* 某些条件 */) {
newList.add(item); // 添加满足条件的元素到新列表
}
}
list.clear(); // 或者list = newList;
```
阅读全文