Maison >Java >javaDidacticiel >Pour le piège de collecte de suppression de boucle en Java

Pour le piège de collecte de suppression de boucle en Java

高洛峰
高洛峰original
2017-01-16 15:46:411618parcourir

Regardez d'abord le code suivant :

import java.util.LinkedList;
import java.util.List;
 
public class DeleteCollection {
   
  public static void main(String[] args) {
    List<String> list = new LinkedList<String>();
    list.add("a");
    list.add("b");
    list.add("c");
    list.add("d");
    list.add("e");
    for(int i=0;i<list.size();i++){ //循环删除集合中的元素
      list.remove(i);
    }
    System.out.println("还剩余的元素个数:"+list.size());
  }
}

Le code ci-dessus devrait être correct selon l'idée, et le résultat de sortie devrait également être 0

Regardez le résultat ci-dessous :

Nombre d'éléments restants : 2

Vous vous demandez peut-être pourquoi ? Étant donné que la taille de la collection change de manière dynamique, lorsque vous supprimez un élément, les numéros de série des éléments sont réorganisés. Le deuxième élément à supprimer est désormais classé à la position du premier élément, mais le troisième élément est en réalité supprimé. éléments, et ainsi de suite, le premier, le troisième, le cinquième,,,,, si vous ajoutez l'instruction au code supprimé d'origine : System.out.println("Élément à supprimer :" list.get (i)); être vérifié.

Le résultat de sortie après avoir ajouté l'instruction ci-dessus :

Élément à supprimer : a
Élément à supprimer : c
Élément à supprimer : e
Numéro restant d'éléments : 2

Solution :

La raison est que l'élément que vous souhaitez supprimer s'est déplacé vers l'avant, et la valeur enregistrée par votre i se déplace toujours vers l'arrière, donc si vous let Si je ne reviens pas en arrière, mais avance d'un point, l'élément initialement classé en deuxième position sera supprimé et l'élément maintenant classé en première position sera supprimé.

Code de base modifié :

for(int i=0;i<list.size();i++){
    System.out.println("即将删除的元素:"+list.get(i));
    list.remove(i);
    i--;
  }

Résultat :

Élément à supprimer : a
Élément à supprimer : b
Élément à supprimer : c
Élément à supprimer : d
Élément à supprimer : e
Nombre d'éléments restants : 0

Ce qui précède est le but de cet article C'est tout . J'espère que vous l'aimerez tous.

Pour plus d'articles sur les pièges de collecte de suppression de boucle for en Java, veuillez faire attention au site Web chinois de PHP !

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