>  기사  >  Java  >  Java에서 List를 삭제할 때 주의할 점

Java에서 List를 삭제할 때 주의할 점

高洛峰
高洛峰원래의
2017-01-22 16:15:571170검색

Java에서 LIST를 삭제할 때는 일반적으로 list.remove(o)를 사용하는데, 이로 인해 문제가 발생하는 경우가 많습니다. 먼저 다음 코드를 살펴보겠습니다.

package com.demo;
  
import java.util.ArrayList;
import java.util.List;
  
public class Test11 {
    
  public void delete(){
    List<Integer> list = new ArrayList<Integer>();
    list.add(1);
    list.add(2);
    list.add(2);
    list.add(3);
    for (int i = 0; i < list.size(); i++) {
      if(list.get(i)==2){
        list.remove(i);
      }
    }
    this.outputList(list);
  }
    
  private void outputList(List<Integer> list){
    for (Integer i : list) {
      System.out.println(i);
    }
  }
  
  public static void main(String[] args) {
    Test11 t = new Test11();
    t.delete();
      
  }
  
}

반환 결과는 다음과 같습니다.

1
 
2
 
3

이 결과는 분명히 우리가 기대했던 것과는 다릅니다. 목록에서 값이 2인 모든 요소를 ​​삭제하려고 하지만 출력에 나타납니다. 결과 2. i가 1이면 List에서 인덱스 1을 가진 요소 2가 삭제되지만 이때 목록은 [1,2,3]이지만 i가 증가한 후에는 동일해지기 때문입니다. 2로 하고, list.get(i)에서 꺼낸 결과는 3이 되는데, 이는 목록 요소가 삭제됨에 따라 그에 따라 인덱스가 변경된다는 의미입니다. 따라서 그렇지 않은 인덱스를 찾아야 합니다. 삭제 시 변경된 반복 방법을 사용하며, 반복자가 생성된 후에는 원본 객체를 가리키는 단일 링크 인덱스 테이블이 생성되며, 이 인덱스 테이블의 내용은 변경되지 않습니다. 즉, 커서를 사용하여 이 인덱스 테이블을 유지하므로 다음과 같이 삭제할 수 있습니다.

package com.demo;
  
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
  
public class Test11 {
    
  public void delete(){
    List<Integer> list = new ArrayList<Integer>();
    list.add(1);
    list.add(2);
    list.add(2);
    list.add(3);
    this.iteratorDelete(list.iterator(), 2);
    this.outputList(list);
  }
    
  private void iteratorDelete(Iterator<Integer> it, int deleteObject){
    while(it.hasNext()){
      int i = it.next();
      if(i==deleteObject){
        it.remove();
      }
    }
  }
    
  private void outputList(List<Integer> list){
    for (Integer i : list) {
      System.out.println(i);
    }
  }
  
  public static void main(String[] args) {
    Test11 t = new Test11();
    t.delete();
      
  }
  
}

이 코드의 결과는 정확합니다!

'iterator에서 삭제했는데 왜 목록의 값이 변경되었나요?'라고 말하는 사람도 있습니다. 이 문제에 대해 스스로 생각해 보십시오! 도저히 모르겠으면 진로를 바꿔도 됩니다!

요약

이 글의 내용이 모두의 공부나 업무에 조금이나마 도움이 되었으면 좋겠습니다. 소통하라는 메시지.

Java에서 List 삭제 시 주의사항에 대한 자세한 관련 글은 PHP 중국어 홈페이지를 참고해주세요!

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