2017-04-25 91 views
-1
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; 
    } 

它会抛出这个异常: java.lang.reflect.InvocationTargetException --- java.util.ConcurrentModificationException如何修复异常java.util.ConcurrentModificationException

如何解决这个问题呢?非常感谢。

这是我使用迭代器来代替了,但它也没有有效:

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); 
    } 
    } 
} 
+0

它不重复,因为我的迭代器是totalHashMap,使用Iterator也没有效果。 – danny

+0

我用迭代器更新代码 – danny

回答

0

摆脱循环内的totalHashMap.put通话和CME会自行消失。用迭代器在结构上修改集合时不能同时运行它。并发修改会扰乱迭代器,并且导致异常情况的并发修改会产生ConcurrentModificationException

相关问题