Pendant le développement du projet, nous pouvons souvent avoir besoin de supprimer dynamiquement certains éléments de l'ArrayList.
Une mauvaise façon :
<pre name="code" class="java">for(int i = 0 , len= list.size();i<len;++i){ if(list.get(i)==XXX){ list.remove(i); } }
La méthode ci-dessus lèvera l'exception suivante :
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)
Parce que vous avez supprimé l'élément mais n'avez pas modifié l'indice d'itération, une exception sera levée lorsque l'itération atteindra la dernière.
Le programme ci-dessus peut être amélioré comme suit :
for(int i = 0 , len= list.size();i<len;++i){ if(list.get(i)==XXX){ list.remove(i); --len;//减少一个 } }
Le code ci-dessus est correct.
Introduisons une autre solution ci-dessous :
L'interface List implémente l'interface Iterator en interne, fournissant aux développeurs un iterator() pour obtenir un objet itérateur de l'objet liste actuel.
Iterator<String> sListIterator = list.iterator(); while(sListIterator.hasNext()){ String e = sListIterator.next(); if(e.equals("3")){ sListIterator.remove(); } }
Ce qui précède est également correct et la deuxième option est recommandée.
Les principes de mise en œuvre des deux solutions sont assez différents. La seconde est simplement encapsulée par jdk.
En regardant le code source d'ArrayList, vous constaterez que de nombreuses méthodes sont implémentées en interne en fonction de l'interface de l'itérateur, il est donc recommandé d'utiliser la deuxième solution.
Ce qui précède est la méthode complète de suppression d'éléments spécifiques dans la boucle arraylist de la classe de collection Java présentée par l'éditeur. J'espère que vous prendrez en charge le site Web PHP chinois ~
Plus de classe de collection Java. arraylist Pour des articles connexes sur la façon de supprimer des éléments spécifiques dans une boucle, veuillez faire attention au site Web PHP chinois !