2017-04-25 17 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.util.ConcurrentModificationExceptionが

これは私がのために交換するIteratorを使用しているが、それはまた、効果的ではありません。

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

iteratorがtotalHashMapなので、重複していないので、Iteratorも有効ではありません。 – danny

+0

イテレータでコードを更新する – danny

答えて

0

ループ内totalHashMap.putコールを取り除くとCMEが消えます。イテレータでコレクションを実行すると同時にコレクションを構造的に変更することはできません。その同時の変更はイテレータを混乱させ、例外的な状況につながる同時変更はConcurrentModificationExceptionを発生させます。

関連する問題