>Java >java지도 시간 >반복하는 동안 Java 컬렉션에서 요소를 안전하게 제거하는 방법은 무엇입니까?

반복하는 동안 Java 컬렉션에서 요소를 안전하게 제거하는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-21 01:02:13178검색

How to Safely Remove Elements from a Java Collection While Iterating?

Java에서 반복하는 동안 요소를 안전하게 제거

Q: foreach 루프를 사용하여 컬렉션을 반복하는 동안 컬렉션에서 요소를 제거하는 것이 허용됩니까? Java에서?

A: 제거를 위해 foreach 루프를 사용하는 것은 그렇지 않습니다. 권장됩니다. 기본 반복자가 노출되지 않고 수정을 위해 직접 액세스할 수 없으므로 예기치 않은 동작이 발생할 수 있습니다.

예:

List<String> names = ....
for (String name : names) {
   // Do something
   names.remove(name).
}

이 코드는 java.util로 인해 실패할 수 있습니다. .ConcurrentModificationException은 제거 작업으로 foreach 루프가 진행되는 동안 아래 컬렉션을 수정합니다.

Q: 아직 제거되지 않은 항목을 제거할 수 있나요? 아직 반복되었나요?

A: 아니요. 루프에서 아직 처리되지 않은 요소를 제거하면 "인덱스가 범위를 벗어났습니다" 오류가 발생할 수 있습니다. 예:

//Assume that the names list as duplicate entries
List<String> names = ....
for (String name : names) {
    // Do something
    while (names.remove(name));
}

반복하는 동안 요소를 안전하게 제거하려면 Iterator를 사용해야 합니다.

List<String> names = ....
Iterator<String> i = names.iterator();
while (i.hasNext()) {
   String s = i.next(); // must be called before you can call i.remove()
   // Do something
   i.remove();
}

Java 문서에서는 iterator 및 listIterator 메소드에 의해 반환된 반복자가 "실패- 빠른." 반복자의 제거 또는 추가 메소드 외부에서 목록을 구조적으로 수정하면 ConcurrentModificationException이 발생합니다.

위 내용은 반복하는 동안 Java 컬렉션에서 요소를 안전하게 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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