如何修复异常java.util.ConcurrentModificationException 私有列表duplicateParamList(Map totalHashMap、Map.Entry参数、, 地图(输入){ List duplicateList=新的ArrayList(); if(totalHashMap.isEmpty()){ 列表值=新的ArrayList(); add(param.getValue()); totalHashMap.put(entry.getKey(),value); 返回副本列表; } 对于(Map.Entry totalEntry:totalHashMap.entrySet()){ if(totalEntry.getValue().contains(param.getValue())){ add(param.getKey()); }否则{ if(totalHashMap.containsKey(entry.getKey())){ get(entry.getKey()).add(param.getValue()); }否则{ List valueList=新的ArrayList(); valueList.add(param.getValue()); totalHashMap.put(entry.getKey(),valueList); } } } 返回副本列表; }
它将抛出此异常: java.lang.reflect.InvocationTargetException ---java.util.ConcurrentModificationException 如何解决这个问题?非常感谢 这是我使用迭代器替换for的原因,但它也无效:如何修复异常java.util.ConcurrentModificationException 私有列表duplicateParamList(Map totalHashMap、Map.Entry参数、, 地图(输入){ List duplicateList=新的ArrayList(); if(totalHashMap.isEmpty()){ 列表值=新的ArrayList(); add(param.getValue()); totalHashMap.put(entry.getKey(),value); 返回副本列表; } 对于(Map.Entry totalEntry:totalHashMap.entrySet()){ if(totalEntry.getValue().contains(param.getValue())){ add(param.getKey()); }否则{ if(totalHashMap.containsKey(entry.getKey())){ get(entry.getKey()).add(param.getValue()); }否则{ List valueList=新的ArrayList(); valueList.add(param.getValue()); totalHashMap.put(entry.getKey(),valueList); } } } 返回副本列表; },java,Java,它将抛出此异常: java.lang.reflect.InvocationTargetException ---java.util.ConcurrentModificationException 如何解决这个问题?非常感谢 这是我使用迭代器替换for的原因,但它也无效: private List<String> duplicateParamList(Map<DistName, List<String>> totalHashMap, Map.Entry<S
private List<String> duplicateParamList(Map<DistName, List<String>> totalHashMap, Map.Entry<String, String> param,
Map.Entry<DistName, ManagedObject> entry) {
List<String> duplicateList = new ArrayList<>();
if (totalHashMap.isEmpty()) {
List<String> values = new ArrayList<>();
values.add(param.getValue());
totalHashMap.put(entry.getKey(), values);
return duplicateList;
}
for (Map.Entry<DistName, List<String>> totalEntry : totalHashMap.entrySet()) {
if (totalEntry.getValue().contains(param.getValue())) {
duplicateList.add(param.getKey());
} else {
if (totalHashMap.containsKey(entry.getKey())) {
totalHashMap.get(entry.getKey()).add(param.getValue());
} else {
List<String> valueList = new ArrayList<>();
valueList.add(param.getValue());
totalHashMap.put(entry.getKey(), valueList);
}
}
}
return duplicateList;
}
Iterator Iterator=totalHashMap.entrySet().Iterator();
while(iterator.hasNext()){
Map.Entry totalEntry=iterator.next();
if(totalEntry.getValue().contains(param.getValue())){
add(param.getKey());
}否则{
if(totalHashMap.containsKey(entry.getKey())){
get(entry.getKey()).add(param.getValue());
}否则{
List valueList=新的ArrayList();
valueList.add(param.getValue());
totalHashMap.put(entry.getKey(),valueList);
}
}
}
摆脱totalHashMap。将
调用放入循环中,CME就会消失。在结构上修改集合的同时使用迭代器对其进行遍历是无法避免的。并发修改会弄乱迭代器,导致异常情况的并发修改会引发ConcurrentModificationException
它不是重复的,因为迭代器是totalHashMap,所以使用迭代器也无效。我用迭代器更新代码
Iterator<Map.Entry<DistName, List<String>>> iterator = totalHashMap.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<DistName, List<String>> totalEntry = iterator.next();
if (totalEntry.getValue().contains(param.getValue())) {
duplicateList.add(param.getKey());
} else {
if (totalHashMap.containsKey(entry.getKey())) {
totalHashMap.get(entry.getKey()).add(param.getValue());
} else {
List<String> valueList = new ArrayList<>();
valueList.add(param.getValue());
totalHashMap.put(entry.getKey(), valueList);
}
}
}