>  기사  >  Java  >  해결 방법: Java 컬렉션 오류: 컬렉션 순회 예외

해결 방법: Java 컬렉션 오류: 컬렉션 순회 예외

PHPz
PHPz원래의
2023-08-25 23:48:221724검색

해결 방법: Java 컬렉션 오류: 컬렉션 순회 예외

해결 방법: Java 컬렉션 오류: 컬렉션 순회 예외

소개:
Java 개발에서 컬렉션은 데이터 집합을 저장하고 조작하기 위해 매우 일반적으로 사용되는 데이터 구조입니다. 그러나 순회 작업에 컬렉션을 사용할 때 컬렉션 순회 예외가 자주 발생합니다. 이 문서에서는 이 문제의 원인과 해결 방법을 설명하고 해당 코드 예제를 제공합니다.

1. 컬렉션 순회 예외의 원인:
컬렉션을 순회하기 위해 반복자 또는 for-each 루프를 사용할 때 순회 프로세스(예: 요소 추가 또는 삭제) 중에 컬렉션이 수정되면 ConcurrentModificationException 예외가 발생합니다. 이는 순회 프로세스 중에 반복자 또는 for-each 루프가 컬렉션의 구조가 변경되었는지 여부를 감지하기 위해 카운터를 유지하고 변경 사항이 발견되면 예외를 발생시키기 때문입니다.

2. 해결 방법:

  1. Iterator를 사용하여 컬렉션을 순회하고, 순회 프로세스 중에 요소를 삭제하려면 Iterator의 Remove() 메서드를 사용하세요. 예는 다음과 같습니다.
List<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 (item.equals("B")) {
        iterator.remove(); // 删除元素
    }
}
  1. 일반 for 루프를 사용하여 컬렉션을 순회하는 경우 List의 Remove() 메서드를 사용하여 요소를 삭제할 수 있으며, 변경 사항이 변경되지 않도록 역순으로 컬렉션을 순회해야 합니다. 색인. 예는 다음과 같습니다.
List<String> list = new ArrayList<>();
// 添加元素
list.add("A");
list.add("B");
list.add("C");

for (int i = list.size() - 1; i >= 0; i--) {
    String item = list.get(i);
    if (item.equals("B")) {
        list.remove(i); // 删除元素
    }
}
  1. ConcurrentHashMap 또는 CopyOnWriteArrayList와 같은 동시 컬렉션 클래스를 사용하면 예외를 발생시키지 않고 순회 중에 컬렉션을 수정할 수 있습니다. 예는 다음과 같습니다.
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
// 添加元素
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    if (entry.getValue() == 2) {
        map.remove(entry.getKey()); // 删除元素
    }
}

결론:
컬렉션 순회 예외는 순회 프로세스 중 컬렉션 수정으로 인해 발생합니다. 이 문제를 해결하기 위해 Iterator를 사용하여 컬렉션을 순회하고 Remove() 메서드를 사용하거나 일반 for 루프를 사용하여 컬렉션을 순회하고 List의 Remove() 메서드를 사용하거나 동시 컬렉션 클래스를 사용할 수 있습니다. 적절한 솔루션을 선택하면 컬렉션 순회 예외 문제를 효과적으로 방지하고 프로그램의 정상적인 작동을 보장할 수 있습니다.

총 단어 수: 437 단어

위 내용은 해결 방법: Java 컬렉션 오류: 컬렉션 순회 예외의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.