Excepcion java.util.ConcurrentModificationException
for-each
para mostrar todos los nombres de los profesores y en ese mismo recorrido queremos borrar al profesor que tiene el nombre de "PEPE PEREZ" y supongamos que hay dos objetos en la lista con ese nombre, bueno fácilmente nos dará la excepción ConcurrentModificationException porque queremos borrar un registro mientras estamos recorriendo la lista, el primer registro lo borrara pero cuando intente borrar el segundo lanza la excepción. Como hacemos ahora, tenemos que recorrer primero la lista y guardar el registro que queremos borrar, para después de haber recorrido la lista borrarlo? Parecen muchos pasos para algo tan sencillo.
Bueno primero déjame contarte que hay varias maneras de iterar sobre una lista y uno de ellos es el Iterator
el cual tiene una diferencia con el for-each
que si nos permite borrar mientras estamos iterando sobre la lista y no importa si es un registro repetido o no. Bueno veamos cómo es en una mini práctica.
for-each
ArrayListlista = new ArrayList (); lista.add("PEPE PEREZ"); lista.add("ALAN BRITO"); lista.add("ZOILA VACA"); lista.add("PEPE PEREZ"); lista.add("ZOIDE LACALLE"); //Recorrer la lista con un for for (String nombre : lista) { if (nombre.equals("PEPE PEREZ")) { lista.remove("PEPE PEREZ"); } }
java.util.ConcurrentModificationException
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
for-each
por un Iterator
. Esta es la diferencia entre el for-each
y el Iterator
, en cuanto a consumo de recursos no hay mucha diferencia así que no te preocupes.
Iterator
Iteratoriterator = lista.iterator(); while (iterator.hasNext()) { String nombre = iterator.next(); if (nombre.equals("PEPE PEREZ")) { iterator.remove(); } }
for-each
que el iterator
ya que es mas fácil de usar y mas nuevo. En fin de cuentas depende de que le quieran hacer a la lista que están recorriendo.
No hay comentarios :
Publicar un comentario