for(auto i: list){ list.remove(i); //TODO: Error 3 : why? }
时间: 2024-09-11 13:02:43 浏览: 35
微信小程序demo:todo:wx.setStorageSync(KEY,DATA) 方法存放数据(源代码+截图)
这段代码尝试通过`for-each`循环遍历并移除`list`中的元素,但可能会遇到错误。因为`remove()`操作会改变集合的大小,而Java `for-each`循环并不支持在迭代过程中修改集合的元素。这被称为"mutable collection"的陷阱[^1]。
正确的做法是使用迭代器(iterator)来逐个处理元素,如示例所示[^1]:
```java
Iterator<Integer> it = list.iterator();
while (it.hasNext()) {
Integer value = it.next();
if (value == 5) {
it.remove(); // 使用迭代器的remove()方法
}
}
```
或者使用更安全的并发工具,如`CopyOnWriteArrayList`,这样可以直接从`list`中移除元素而不影响迭代:
```java
List<Integer> copyOnWriteList = Collections.synchronizedList(new CopyOnWriteArrayList<>());
// ... 添加元素
copyOnWriteList.removeIf(value -> value == 5);
```
阅读全文