Programing/JAVA

java.util.ConcurrentModificationException 원인 및 처리 방법

리커니 2020. 7. 24.
반응형

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();
	}
}

 

 

 

 

 

 

 

 

반응형

댓글

💲 추천 글