java - 使用 Collection.remove() 时 Java ConcurrentModificationException 背后的原因
问题描述
StackOverflow 上的许多贡献提供了一个清晰的解释,说明为什么应该使用 Iterator 及其 remove 方法在迭代集合时删除集合中的元素(例如1、2、3)。
但是,当一个人使用而不是时,究竟是什么导致了ConcurrentModificationException
抛出?我一直在寻找详细的答案,但没有找到。甚至 The Java™ Tutorials也简单地指出:Collection.remove()
Iterator.remove()
for-each 构造隐藏了迭代器,因此您不能调用 remove。
这是什么意思?这两种实现有何不同?在如下一段代码中,导致异常的事件链是什么?
Collection<String> names = new ArrayList<>();
names.add("Luke");
names.add("Leia");
names.add("Anakin");
for (String name : names) {
if (name.equals("Anakin")) {
names.remove(name);
}
}
解决方案
推荐阅读
- android - Admob 自适应横幅广告实施
- rust - 你如何更新 rust 的 tonic 服务
- java - 更新 JsonNode 中每个项目的值 (jackson)
- python - Javascript Map() 的 Python 等效函数是什么?
- google-maps - 在 ionic 3 Ionic - 当我们向下滚动时,Google 地方的自动完成位置与输入框分离
- asp.net - OData 过滤器查询 - 具有两个包含的请求不起作用
- json - 如何使用 jq 在 shell 中分隔 JSON 键和值
- ios - SwiftUI,如何使用工具栏在视图之间导航而不重新创建视图以及如何管理资源
- react-native - 如何使用 Agora.io 要求用户加入频道开始通话
- regex - 用自定义处理替换另一个字符串中出现的字符串