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
위에서 말한 것이 바로 본문의 전체 내용입니다. 여러분이 좋아하시기 바랍니다.

좋은 웹페이지 즐겨찾기