我試着讓我的removeItemFromMapByValue
方法工作,removeItemFromMapByValue
在一起,但是當我開始收集我的代碼我得到ConcurrentModificationException的。 removeItemFromMapByValue
必須在值中刪除相同的名稱。請編譯錯誤ConcurrentModificationException的,試圖使用方法去除相同的名稱
public class Solution
{
public static HashMap<String, String> createMap()
{
HashMap<String, String> map = new HashMap<String, String>();
map.put("Stallone", "Silvest");
map.put("Morikone", "Enio");
map.put("Vivaldi","Antonio");
map.put("Belucci", "Monica");
map.put("Gudini", "Harry");
map.put("Verdo", "Dhuzeppe");
map.put("Maracci", "Bruno");
map.put("Carleone", "Vito");
map.put("Bracco", "Luka");
map.put("Stradivari", "Antonio");
return map;
}
public static void removeTheFirstNameDuplicates(HashMap<String, String> map)
{
for (Map.Entry<String, String> pair : map.entrySet()){
String name = pair.getValue();
removeItemFromMapByValue(map, name);
}
}
public static void removeItemFromMapByValue(HashMap<String, String> map, String value)
{
HashMap<String, String> copy = new HashMap<String, String>(map);
for (Map.Entry<String, String> pair: copy.entrySet())
{
if (pair.getValue().equals(value))
map.remove(pair.getKey());
}
}
public static void main(String[] args)
{
HashMap<String, String> map = createMap();
removeTheFirstNameDuplicates(map);
System.out.println(map);
}
}
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:926)
at java.util.HashMap$EntryIterator.next(HashMap.java:966)
at java.util.HashMap$EntryIterator.next(HashMap.java:964)
at com.javarush.test.level08.lesson08.task05.Solution.removeTheFirstNameDuplicates(Solution.java:32)
at com.javarush.test.level08.lesson08.task05.Solution.main(Solution.java:52)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Process finished with exit code 1
你確定當**編譯**時會出現'ConcurrentModificationException'錯誤嗎?如果它實際上是運行時錯誤,您可以發佈確切的錯誤消息或堆棧跟蹤嗎? –
1)它不是編譯錯誤。這是運行程序時引發的異常。 2)如果你得到一個異常,你應該如何處理異常棧跟蹤。 –
你混淆了編譯錯誤和運行時異常。如果您收到編譯錯誤,那麼您的問題應該包含來自編譯器的確切且完整的錯誤消息。如果你得到一個運行時異常,你的問題應該包含異常的完整堆棧跟蹤。閱讀錯誤信息是瞭解發生什麼和在哪裏發生的最佳方式。不讀它會讓你和我們猜測問題可能是什麼。 –