java 집합류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 순환에서 특정 요소를 삭제하는 방법의 모든 내용입니다. 많은 응원 부탁드립니다~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.