非多线程程序中的java.util.ConcurrentModificationException 是一个常见的 Java 异常,通常在遍历集合(如 ArrayList、LinkedList 等)时,尝试修改集合结构时会抛出。这个异常的主要原因是在遍历过程中,集合的结构发生了改变,导致迭代器无法正常工作。为了解决这个问题,可以采用以下方法:
Collections.synchronizedList()
)来确保在修改集合时不会抛出异常。List<String> list = Collections.synchronizedList(new ArrayList<String>());
CopyOnWriteArrayList
、ConcurrentHashMap
等,这些集合在遍历过程中不需要额外的同步措施。List<String> list = new CopyOnWriteArrayList<String>();
remove()
方法:如果只是删除元素,可以使用迭代器的 remove()
方法来删除元素,而不是直接调用集合的 remove()
方法。Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
if (shouldRemove(element)) {
iterator.remove();
}
}
ConcurrentModificationException
的问题。for (String element : list) {
// do something with element
}
List<String> tempList = new ArrayList<String>();
for (String element : list) {
if (shouldRemove(element)) {
tempList.add(element);
}
}
list.removeAll(tempList);
总之,避免在非多线程程序中出现 java.util.ConcurrentModificationException
的关键是确保在遍历过程中不会修改集合结构。可以使用同步迭代器、并发集合、迭代器的 remove()
方法、增强的 for 循环或者临时列表等方法来解决这个问题。
小程序云开发官方直播课(应用开发实战)
小程序·云开发官方直播课(数据库方向)
企业创新在线学堂
云+社区技术沙龙[第17期]
Elastic 实战工作坊
Elastic 实战工作坊
腾讯技术创作特训营第二季第5期
云+社区沙龙online第6期[开源之道]
企业创新在线学堂
领取专属 10元无门槛券
手把手带您无忧上云