Programing/JAVA
java.util.ConcurrentModificationException 원인 및 처리 방법
리커니
2020. 7. 24. 15:35
반응형
java.util.ConcurrentModificationException 원인 및 처리방법
java.util.ConcurrentModificationException 이 발생하는 원인과 처리방법에 대해 알아보겠습니다.
해당 Exception 은 대부분 Collection 객체에 remove 메소드 호출 시 발생을 합니다.
List 의 경우
List<int> list = new ArrayList<int>();
list.add(1);
list.add(2);
list.add(3);
for(Integer i : list){
list.remove(i);
}
Set 의 경우
Set<Integer> set = new HashSet<Integer>();
set.add(1);
set.add(2);
set.add(3);
for(Iterator<Integer> itr = set.iterator(); itr.hasNext();){
int i = itr.next();
if(i == 2) set.remove(i);
}
결론적으로 말하자면 엘리먼트의 인덱스가 실시간으로 변하기 때문에 발생하는 이벤트 입니다.
Length가 변경되면서 해당 인덱스의 값이 null 이 되기 때문에 발생하는 것이죠.
이를 해결하기 위해서는 Iterator를 사용하여야 하며,
itr.next() 의 remove가 아니라 itr 자체에 remove 를 해주셔야 합니다.
Set의 경우 수정 코드
Set<Integer> set = new HashSet<Integer>();
set.add(1);
set.add(2);
set.add(3);
for(Iterator<Integer> itr = set.iterator(); itr.hasNext();){
int i = itr.next();
if(i == 2) {
itr.remove();
}
}
반응형