Betrachten Sie den folgenden Code.ConcurrentModificationException - HashMap
Map<Integer,String> map = new HashMap<Integer, String> (5);
map.put(1, "a");
map.put(2, null);
map.put(3, "b");
map.put(4, "e");
for (String str : map.values()) {
if ("b".equals(str)) {
map.put(5, "f");
}
}
System.out.println(map.get(5));
Es wird ConcurrentModificationException auftreten. In dieser Situation habe ich verstanden, dass wir die Sammlungen, die wir wiederholen, nicht ändern können.
Bitte beachten Sie jedoch den folgenden Code. Ich entferne nur eine Linie, die map.put(4,"e");
ist
Es wird funktionieren!
Map<Integer,String> map = new HashMap<Integer, String> (5);
map.put(1, "a");
map.put(2, null);
map.put(3, "b");
for (String str : map.values()) {
if ("b".equals(str)) {
map.put(5, "f");
}
}
System.out.println(map.get(5));
Irgendwelche Tipps? Warum passiert das?
'" b "' wird das letzte Element. Ich nehme an, dass die Überprüfung in der "nächsten" Methode des Iterators durchgeführt wird und nicht mehr aufgerufen wird. – talex
Es ist kein vollständiges Duplikat. Aber die allgemeine Idee hinter den Antworten ist dieselbe. – talex