> Java > java지도 시간 > Java For-Each 루프 중에 요소를 제거하는 것이 안전하며 어떻게 올바르게 수행할 수 있습니까?

Java For-Each 루프 중에 요소를 제거하는 것이 안전하며 어떻게 올바르게 수행할 수 있습니까?

Barbara Streisand
풀어 주다: 2024-12-28 12:54:09
원래의
556명이 탐색했습니다.

Is Removing Elements During a Java For-Each Loop Safe, and How Can It Be Done Correctly?

반복 중 컬렉션에서 요소 제거

Java에서 foreach 루프를 사용하여 컬렉션을 반복하는 동안 컬렉션의 콘텐츠를 변경하면 예상치 못한 결과가 발생할 수 있습니다. 행동과 예외. 이 맥락에서 컬렉션에서 요소를 제거하는 것이 허용되는지 여부에 대한 의문이 생깁니다.

제공된 예에서와 같이 foreach 루프에서 요소를 제거하는 적법성에 관해:

List<String> names = ....
for (String name : names) {
   // Do something
   names.remove(name).
}
로그인 후 복사

답변 라면 foreach 루프 내에서 요소를 제거하는 것이 합법적입니다. 그러나 요소를 제거한 후 컬렉션의 반복자가 유효하지 않게 되어 잠재적으로 ConcurrentModificationException이 발생할 수 있다는 점에 유의해야 합니다.

또한 아직 반복되지 않은 항목을 제거하는 것은(두 번째 예에서와 같이) 다음과 같습니다. 허용되지 않습니다. 반복자의 구현은 이러한 시나리오를 적절하게 처리할 수도 있고 그렇지 않을 수도 있습니다. 잠재적인 문제를 방지하려면 요소를 제거하기 전에 모든 요소를 ​​반복해야 합니다.

안전한 제거를 위해 반복자 사용

반복 중에 요소를 안전하게 제거하려면 다음을 수행하세요. 명시적인 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 For-Each 루프 중에 요소를 제거하는 것이 안전하며 어떻게 올바르게 수행할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿