JAVA 기반 - ArrayList 삭제 문제
2757 단어 작은 지식
그러나 마지막 결과 검사를 할 때 항상 절반 정도 덜 지워진 것을 발견했다.인터넷에서 찾아보니 그 이유를 알 수 있었다.먼저 다음과 같은 간단한 에뮬레이션 코드를 살펴보십시오.
public class ListRemove {
/**
* @param args
*/
public static void main(String[] args) {
ArrayList arrayList = new ArrayList();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
arrayList.add(5);
arrayList.add(4);
arrayList.add(6);
arrayList.add(9);
ListRemove l = new ListRemove();
System.out.println(" :");
l.printArrayList(arrayList);
//
// l.deleteEven(arrayList);
// System.out.println(" :");
// l.printArrayList(arrayList);
//
l.removeByIterate(arrayList);
System.out.println(" :");
l.printArrayList(arrayList);
}
//
public void deleteEven(ArrayList a){
for(int i=0;i a){
Iterator array = a.iterator();
int i=0;
while(array.hasNext()){
if(i>=a.size()){//
break;
}else if(a.get(i)%2==0){
a.remove(i);
}
i++;
}
}
// arrayList
public void printArrayList(ArrayList a){
for(int i=0;i
실행 후 결과는 다음과 같습니다. 삭제 전 인쇄는 다음과 같습니다. 1,2,3,5,4,6,9 순환 삭제 짝수 후 인쇄는 다음과 같습니다. 1,3,5,6,9 삭제 전 인쇄는 다음과 같습니다. 1,2,3,5,4,6,9 반복 삭제 짝수 후 인쇄는 다음과 같습니다. 1,3,5,6,9
왜 array List에서 6이라는 짝수는 삭제되지 않았습니까?왜냐하면 삭제하는 동시에arrayList의size가 바뀌었고 요소의 하단도 바뀌었기 때문이다.짝수 4를 삭제할 때 다음 순환에서 얻을 요소는 9입니다.6 은 건너뛰었다.사실 건너뛴 것은 6뿐만 아니라 2 뒤에 있는 3도 건너뛰었다.해결 방법은 다음과 같습니다.
//
public void deleteEven(ArrayList a){
for(int i=0;i a){
Iterator array = a.iterator();
int i=0;
while(array.hasNext()){
if(i>=a.size()){//
break;
}else if(a.get(i)%2==0){
a.remove(i);
i--;// ,
}
i++;
}
}
또 다른 해결 방법은 거꾸로 순환하는 것이다.수정 코드는 다음과 같습니다.
//
public void deleteEven(ArrayList a){
for(int i=a.size()-1;i>0;i--){
if(a.get(i)%2==0){
a.remove(i);
}
}
}
public void removeByIterate(ArrayList a){
Iterator array = a.iterator();
int i=a.size()-1;
while(array.hasNext()){
if(i<0){//
break;
}else if(a.get(i)%2==0){
a.remove(i);
}
i--;
}
}
이렇게 하면 모든 요소도 필터링할 수 있습니다.그리고 한마디 더 하자면, 진심으로 이 웹 페이지 텍스트 편집기에 의해 패배했다. 아주 쓰기 불편하다. 아마도 나도 쓸 줄 모를 것이다.어지럽다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
BST 삽입 + 임의의 노드 삭제 귀속 실현주로 bst에서 임의의 노드를 삭제합니다. 중차순 후계 노드를 찾아 연결을 완성합니다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.