java에서 for 순환 삭제 집합 함정
import java.util.LinkedList;
import java.util.List;
public class DeleteCollection {
public static void main(String[] args) {
List<String> list = new LinkedList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
for(int i=0;i<list.size();i++){ //
list.remove(i);
}
System.out.println(" :"+list.size());
}
}
상술한 코드는 사고방식에 따라 옳고 출력의 결과도 0이어야 한다다음 실제 출력 결과를 보십시오.
남은 원소 개수: 2
왜 그런지 물어볼지도 몰라요.집합의 크기는 동적 변화이기 때문에 원소를 삭제한 후에 원소의 번호가 다시 배열된다. 원래 두 번째로 삭제해야 할 원소는 현재 첫 번째 원소의 위치에 위치하고 진정으로 삭제한 것은 세 번째 원소이다. 순서대로 유추하면 삭제한 것은 첫 번째, 세 번째, 다섯 번째,,,,, 만약에 원래 삭제한 코드에 문장을 넣는다면: System.out.println ("삭제할 요소:"+list.get (i);검증할 수 있습니다.
위의 문구를 추가한 결과
삭제할 요소: a
삭제할 요소: c
삭제할 요소: e
남은 원소 개수: 2
해결 방법:
그 이유는 삭제할 원소가 앞으로 이동했기 때문이다. 당신의 i가 저장한 값은 여전히 뒤로 가기 때문이다. 따라서 i가 뒤로 가지 않고 앞으로 가면 원래 두 번째 위치에 있는 원소가 현재 첫 번째 위치에 있는 원소를 삭제할 수 있다.
변경된 핵심 코드:
for(int i=0;i<list.size();i++){
System.out.println(" :"+list.get(i));
list.remove(i);
i--;
}
결과:삭제할 요소: a
삭제할 요소:b
삭제할 요소: c
삭제할 요소:d
삭제할 요소: e
나머지 요소 개수: 0
위에서 말한 것이 바로 본문의 전체 내용입니다. 여러분이 좋아하시기 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.