执行以下代码时出现ConcurrentModificationException:
public void refreshAvailableCaseSettings() throws Exception {
LinkedHashMap<Integer, CaseSetting> cases = getAvailableCases();
/* java.util.ConcurrentModificationException even after trying entryset()
for(Map.Entry<Integer, CaseSetting> entry : cases.entrySet()){
entry.getValue().refresh(false);
}
*/
// java.util.ConcurrentModificationException
Iterator casesIterator = cases.values().iterator();
while (casesIterator.hasNext()) {
CaseSetting caseSetting = casesIterator.next();
caseSetting.refresh(false);
}
}
错误:
java.util.ConcurrentModificationException
at java.util.LinkedHashMap$LinkedHashIterator.nextNode(LinkedHashMap.java:719)
at java.util.LinkedHashMap$LinkedEntryIterator.next(LinkedHashMap.java:752)
at java.util.LinkedHashMap$LinkedEntryIterator.next(LinkedHashMap.java:750)
我不是通过添加或删除元素来修改地图。请在这里帮助我了解问题。
谢谢!
refresh
的功能是什么?据我了解,您之所以会得到这些,仅仅是因为您在迭代时修改了HashMap
,我以前在地图上放置东西时会遇到这些错误,这意味着尺寸正在增加。
此外,您还需要考虑所有问题,例如CaseSetting
类