En el desarrollo de proyectos, a menudo es posible que necesitemos eliminar dinámicamente algunos elementos en ArrayList.
Una forma incorrecta:
<preame = "código"> for (int i = 0, len = list.size (); i <len; ++ i) {if (list.get (i) == xxx) {list.remove (i); }}El método anterior lanzará la siguiente excepción:
Excepción en el hilo "principal" java.lang.indexoUtofboundsexception: Índice: 3, tamaño: 3 en java.util.arraylist.rangecheck (fuente desconocida) en java.util.arraylist.get (fuente desconocida) en ListDemo.Main (ListDemo.Java:20)
Debido a que eliminó el elemento, pero no cambió el subíndice de iteración, de modo que cuando la iteración alcanza la última, se lanzará una excepción.
El programa anterior se puede mejorar de la siguiente manera:
for (int i = 0, len = list.size (); i <len; ++ i) {if (list.get (i) == xxx) {list.remove (i); --len; // reduce uno}}El código anterior es correcto.
Presentemos otra solución:
La interfaz de la lista implementa la interfaz Iterator internamente, proporcionando al desarrollador un iterador () para obtener un objeto Iterator del objeto de lista actual.
Iterator <String> slistIterator = list.iterator (); while (slistIterator.hasNext ()) {string e = slistIterator.next (); if (e.equals ("3")) {slistIterator.remove (); }}Lo anterior también es correcto y se recomienda la segunda solución.
Los principios de implementación de las dos soluciones son muy similares, y el segundo está encapsulado por JDK.
Al ver el código fuente de ArrayList, encontrará que muchos métodos se implementan internamente en función de la interfaz Iterator, por lo que se recomienda la segunda solución.
Lo anterior es todo el contenido del método para eliminar elementos específicos en el bucle de ArrayList de colección Java que se le trae. Espero que todos apoyen a Wulin.com ~