Maison  >  Article  >  Java  >  Choses à noter lors de la suppression d'une liste en Java

Choses à noter lors de la suppression d'une liste en Java

高洛峰
高洛峰original
2017-01-22 16:15:571181parcourir

Lors de la suppression de LIST en Java, list.remove(o) est généralement utilisé ; mais cela pose souvent des problèmes. Examinons d'abord le code suivant :

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();
      
  }
  
}

Le résultat renvoyé est :

1
 
2
 
3

Ce résultat n'est évidemment pas celui auquel nous nous attendions. Nous voulons supprimer tous les éléments de 2 dans la liste, mais le résultat de sortie 2. apparaît dans . En effet, lorsque i est égal à 1, l'élément 2 avec l'index 1 dans la liste est supprimé. À ce stade, la liste est [1,2,3], mais ensuite, une fois i incrémenté, elle est égale. à 2. Lorsque list.get(i), le résultat retiré devient 3, ce qui signifie que lorsque l'élément de liste est supprimé, l'index change en conséquence. C'est le piège, nous devons donc trouver un élément qui est en cours de suppression. Lorsque l'itérateur est créé, une table d'index à liaison unique pointant vers l'objet d'origine sera créée. Lorsque le nombre d'objets d'origine change, le contenu de cette table d'index ne changera pas de manière synchrone. Le curseur est donc utilisé pour maintenir cette table d'index. il peut être supprimé comme ceci :

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();
      
  }
  
}

Le résultat de ce code est correct !

Certaines personnes diront peut-être, je l'ai supprimé dans l'itérateur, pourquoi la valeur de la liste a-t-elle changé ? Pensez à ce problème vous-même ! Si vous n’y parvenez pas, vous pouvez changer de carrière !

Résumé

Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article pourra être utile aux études ou au travail de chacun. Si vous avez des questions, vous pouvez partir. un message à communiquer.

Pour plus d'articles sur les questions nécessitant une attention particulière lors de la suppression d'une liste en Java, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn