Java java.util.ConcurrentModificationException 처리
2024. 11. 30. 07:42ㆍJava
Collection(List, Set, Map 등)을 반복중에 구조적 변경을 할 경우, 예외가 발생함
예외 발생 예
// 순환하는 중에 요소 등록하는 경우
import java.util.ArrayList;
import java.util.Iterator;
public class ConcurrentModificationDemo {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
for (String item : list) {
if ("B".equals(item)) {
list.add("D"); // Structural modification during iteration
}
}
}
}
// 순환하는 중에 요소 삭제하는 경우
import java.util.ArrayList;
import java.util.Iterator;
public class ConcurrentModificationDemo {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if ("B".equals(item)) {
list.remove(item); // Structural modification during iteration
}
}
}
}
처리 방법 1
import java.util.ArrayList;
import java.util.Iterator;
public class SafeModification {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if ("B".equals(item)) {
iterator.remove(); // Safe removal
}
}
System.out.println(list); // Output: [A, C]
}
}
처리방법 2
ArrayList<String> copyList = new ArrayList<>(list);
for (String item : copyList) {
if ("B".equals(item)) {
list.remove(item); // Modify the original list safely
}
}
'Java' 카테고리의 다른 글
Java 이미지 타입 정보 얻기 (0) | 2024.12.05 |
---|---|
Java String[]에서 ""를 찾아내기 (0) | 2024.11.30 |
Java Exception에 변수 추가하기 (0) | 2024.11.30 |
Java Directory 존재여부 체크 및 생성 (0) | 2024.11.30 |
Java 정규식으로 replace 하기 (0) | 2024.11.26 |