다음 코드에서 ConcurrentModificationException
이 예상되지만 제대로 작동합니다.설명 HashMap의 @ConcurrentModificationException
HashMap<Integer, String>table1 = new HashMap<Integer, String>();
table1.put(1, "Sam");
table1.put(2, "Jon");
table1.put(3, "Doe");
Iterator itr1 = table1.entrySet().iterator();
table1.put(3, "DONN");
while(itr1.hasNext())
{
System.out.println("---Value--" + itr1.next());
}
HashMap
에 대한 JavaDoc을 당으로서 :이 클래스의 "모음보기 메소드」에 의해 반환
반복자 있습니다 르파 : 맵이 구조적으로 반복자 후 변경되면 이터레이터 자신의 remove 메소드를 통하는 것을 제외하고 어떤 방식 으로든 반복자는 ConcurrentModificationException을 발생시킵니다.
그래서 내가 ConcurrentModificationException
을 받고해야 Iterator
을 받고 후 HashMap
을 수정하고 있기 때문이다. 왜 던지지 않는거야?
"Fail-fast iterators는 최선의 노력을 기울여 ConcurrentModificationException을 던집니다. 따라서이 예외에 의존하는 프로그램을 작성하는 것은 잘못된 것입니다. 반복기의 fail-fast 동작은 다음과 같아야합니다. 버그를 탐지하기 위해서만 사용하십시오 *. " – kiheru