Java에서 LIST를 삭제할 때는 일반적으로 list.remove(o)를 사용하는데, 이로 인해 문제가 발생하는 경우가 많습니다. 먼저 다음 코드를 살펴보겠습니다.
package com.demo; import java.util.ArrayList; import java.util.List; public class Test11 { public void delete(){ List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(2); list.add(3); for (int i = 0; i < list.size(); i++) { if(list.get(i)==2){ list.remove(i); } } this.outputList(list); } private void outputList(List<Integer> list){ for (Integer i : list) { System.out.println(i); } } public static void main(String[] args) { Test11 t = new Test11(); t.delete(); } }
반환 결과는 다음과 같습니다.
1 2 3
이 결과는 분명히 우리가 기대했던 것과는 다릅니다. 목록에서 값이 2인 모든 요소를 삭제하려고 하지만 출력에 나타납니다. 결과 2. i가 1이면 List에서 인덱스 1을 가진 요소 2가 삭제되지만 이때 목록은 [1,2,3]이지만 i가 증가한 후에는 동일해지기 때문입니다. 2로 하고, list.get(i)에서 꺼낸 결과는 3이 되는데, 이는 목록 요소가 삭제됨에 따라 그에 따라 인덱스가 변경된다는 의미입니다. 따라서 그렇지 않은 인덱스를 찾아야 합니다. 삭제 시 변경된 반복 방법을 사용하며, 반복자가 생성된 후에는 원본 객체를 가리키는 단일 링크 인덱스 테이블이 생성되며, 이 인덱스 테이블의 내용은 변경되지 않습니다. 즉, 커서를 사용하여 이 인덱스 테이블을 유지하므로 다음과 같이 삭제할 수 있습니다.
package com.demo; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Test11 { public void delete(){ List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(2); list.add(3); this.iteratorDelete(list.iterator(), 2); this.outputList(list); } private void iteratorDelete(Iterator<Integer> it, int deleteObject){ while(it.hasNext()){ int i = it.next(); if(i==deleteObject){ it.remove(); } } } private void outputList(List<Integer> list){ for (Integer i : list) { System.out.println(i); } } public static void main(String[] args) { Test11 t = new Test11(); t.delete(); } }
이 코드의 결과는 정확합니다!
'iterator에서 삭제했는데 왜 목록의 값이 변경되었나요?'라고 말하는 사람도 있습니다. 이 문제에 대해 스스로 생각해 보십시오! 도저히 모르겠으면 진로를 바꿔도 됩니다!
요약
이 글의 내용이 모두의 공부나 업무에 조금이나마 도움이 되었으면 좋겠습니다. 소통하라는 메시지.
Java에서 List 삭제 시 주의사항에 대한 자세한 관련 글은 PHP 중국어 홈페이지를 참고해주세요!