>  기사  >  Java  >  Java의 for 루프 삭제 수집 트랩

Java의 for 루프 삭제 수집 트랩

高洛峰
高洛峰원래의
2017-01-16 15:46:411533검색

우선 다음 코드를 보세요.

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("Element to be delete: "+list.get(i)); 확인될 수 있습니다.

위 문장을 추가한 후의 출력 결과:

삭제할 요소: a
삭제할 요소: c
삭제할 요소: e
남은 개수 of elements: 2

해결책:

이유는 삭제하려는 요소가 앞으로 이동했고, i가 저장한 값은 여전히 ​​뒤로 이동하기 때문입니다. let i가 뒤로 가지 않고 앞으로 이동하면 원래 두 번째 위치에 순위가 매겨졌으나 지금은 첫 번째 위치에 순위가 매겨진 요소가 삭제될 수 있습니다.

변경된 핵심 코드:

for(int i=0;i<list.size();i++){
    System.out.println("即将删除的元素:"+list.get(i));
    list.remove(i);
    i--;
  }

결과:

삭제할 요소: a
삭제할 요소: b
Element 삭제할 요소: c
삭제할 요소: d
삭제할 요소: e
남은 요소 수: 0

위 내용이 이 글의 전체 내용입니다. 당신은 모두 그것을 좋아합니다.

Java의 for 루프 삭제 수집 트랩과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

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