우선 다음 코드를 보세요.
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 중국어 웹사이트를 주목하세요!