반복 및 제거 중 동시 수정 예외
동시 수정(예: 요소 제거)을 수행하는 동안 HashMap을 반복할 때 ConcurrentModificationException이 발생할 수 있습니다. 발생하다. 이는 맵에 대한 반복자의 내부 참조가 수정으로 인해 무효화되기 때문입니다.
ArrayList를 사용한 초기 솔루션
이 예외를 방지하는 일반적인 접근 방식 중 하나는 복사본을 생성하는 것입니다. new ArrayList<>(map.keySet())를 사용하여 지도의 키 세트를 가져옵니다. 그러나 이 접근 방식은 불필요한 키 복사본을 생성하므로 비효율적일 수 있습니다.
제거를 위해 반복자 사용
더 효율적인 솔루션은 맵 항목을 반복하는 것입니다. 반복자를 사용하면 요소를 안전하게 제거할 수 있습니다. 지도의 EntrySet() 메소드는 각각 getKey() 및 getValue() 메소드를 포함하는 항목 세트를 반환합니다.
예제 코드:
Map<String, String> map = new HashMap<>(); map.put("test", "test123"); map.put("test2", "test456"); for (Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); it.hasNext();) { Map.Entry<String, String> entry = it.next(); if (entry.getKey().equals("test")) { it.remove(); } }
이 예에서는 지도 항목을 반복하고 "테스트" 키를 안전하게 제거합니다. 반복자는 지도의 내부 구조에 필요한 수정 사항을 처리하여 ConcurrentModificationException을 방지합니다.
위 내용은 반복하는 동안 HashMap에서 요소를 안전하게 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!