본문 바로가기
Programming/Java

[JAVA] concurrentmodificationException 발생

by Hello2 2022. 2. 1.

Iterator를 사용했더니 나온 에러.

 

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class IteratorTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
//        Iterator it = list.iterator();    이렇게 쓰면 concurrentmodificationException 발생
        
        list.add("Hello");

        for(Iterator<String> iterator = list.iterator(); iterator.hasNext();){
            String value = iterator.next();
//            value = iterator.next();      // next 한 번 더하면 오류 발생
            System.out.println(value);
        }

    }
}

 

Iterator 변수(위 코드에서는 it)에 list.iterator()를 대입하고 기존 ArrayList에 값을 추가하거나 삭제하면

Iterator 변수가 ArrayList 안에 있는 값의 주소를 가져오지 못한다.(참조를 못한다)

그래서 변수를 추가하거나 삭제 한 다음에 iterator를 호출하자.

반복문이라면 값이 바뀔 때 마다 List의 iterator를 계속 새롭게 호출해서 넣어줘야 한다!