다음 코드를 고려하십시오.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));
발생합니다. ConcurrentModificationException이 발생합니다. 이 상황에서 우리는 반복되는 컬렉션을 수정할 수 없다는 것을 이해했습니다.
그러나 다음 코드를 고려하십시오. 나는 단지 하나의 라인을 제거합니다 map.put(4,"e");
그것은 작동합니다!
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));
모든 팁? 왜 이런 일이 일어 났습니까?
' "b"'가 마지막 요소가됩니다. 나는 체크가 iterator의'next' 메소드에서 수행되고 더 이상 호출되지 않는다고 가정합니다. – talex
완전한 중복이 아닙니다. 그러나 답변 뒤에 나오는 일반적인 생각은 같습니다. – talex