>  기사  >  Java  >  Java 컬렉션 클래스 arraylist 루프에서 특정 요소를 삭제하는 방법

Java 컬렉션 클래스 arraylist 루프에서 특정 요소를 삭제하는 방법

高洛峰
高洛峰원래의
2017-01-22 16:12:061677검색

프로젝트 개발 중에 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 중국어 웹사이트에 주목하세요!

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