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 중국어 웹사이트의 기타 관련 기사를 참조하세요!