프로젝트 개발 중에 ArrayList의 일부 요소를 동적으로 삭제해야 하는 경우가 종종 있습니다.
잘못된 방법:
<pre name="code" class="java">for(int i = 0 , len= list.size();i<len;++i){ if(list.get(i)==XXX){ list.remove(i); } }
위의 방법에서는 다음 예외가 발생합니다.
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3 at java.util.ArrayList.RangeCheck(Unknown Source) at java.util.ArrayList.get(Unknown Source) at ListDemo.main(ListDemo.java:20)
요소는 다음과 같습니다. 삭제되었지만 반복 첨자는 변경되지 않으므로 반복이 마지막 첨자에 도달하면 예외가 발생합니다.
위 프로그램은 다음과 같이 개선할 수 있습니다.
for(int i = 0 , len= list.size();i<len;++i){ if(list.get(i)==XXX){ list.remove(i); --len;//减少一个 } }
위 코드가 맞습니다.
아래에 또 다른 솔루션을 소개하겠습니다.
List 인터페이스는 내부적으로 Iterator 인터페이스를 구현하여 개발자에게 현재 목록 개체의 반복자 개체를 가져오는 iterator()를 제공합니다.
Iterator<String> sListIterator = list.iterator(); while(sListIterator.hasNext()){ String e = sListIterator.next(); if(e.equals("3")){ sListIterator.remove(); } }
위의 말도 맞고, 두 번째 옵션을 권장합니다.
두 솔루션의 구현 원리는 상당히 다릅니다. 두 번째 솔루션은 jdk로 캡슐화됩니다.
ArrayList 소스 코드를 보면 iterator 인터페이스를 기반으로 내부적으로 많은 메소드가 구현되어 있는 것을 볼 수 있으므로 두 번째 솔루션을 사용하는 것이 좋습니다.
위 내용은 편집자님이 알려주신 자바 컬렉션 클래스 arraylist 루프의 특정 요소를 삭제하는 전체 방법입니다. 모두들 PHP 중국어 홈페이지를 응원해주시길 바랍니다~
자바 컬렉션 클래스 더보기 arraylist 루프에서 특정 요소를 삭제하는 방법에 대한 관련 기사를 보려면 PHP 중국어 웹사이트에 주목하세요!