java 집합류arraylist 순환에서 특정 요소를 삭제하는 방법

1469 단어 java집합arraylist
프로젝트 개발에서, 우리는 왕왕 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 인터페이스를 실현하여 개발자에게 현재list 대상의 iterator () 를 제공합니다.

Iterator<String> sListIterator = list.iterator(); 
while(sListIterator.hasNext()){ 
  String e = sListIterator.next(); 
  if(e.equals("3")){ 
  sListIterator.remove(); 
  } 
}
위의 것도 옳고 두 번째 방안을 추천한다.
두 가지 방안의 실현 원리는 모두 차이가 많은데, 두 번째는 jdk가 봉인했을 뿐이다.
ArrayList 원본을 보면 내부적으로iterator 인터페이스를 바탕으로 이루어진 방법이 많기 때문에 두 번째 방안을 추천합니다.
다음은 여러분께 가져온 자바 집합류arraylist 순환에서 특정 요소를 삭제하는 방법의 모든 내용입니다. 많은 응원 부탁드립니다~

좋은 웹페이지 즐겨찾기