¿Cómo se comportará un iterador instanciado para una colección si se llama al método collection.remove()?
sobes.tech AI
Respuesta de la IA
Llamar a collection.remove() durante la iteración con un iterador instanciado puede provocar una ConcurrentModificationException.
Esto sucede porque el iterador generalmente no conoce los cambios realizados en la colección base directamente desde fuera del iterador. El iterador mantiene un estado interno (por ejemplo, el índice del elemento actual), que se vuelve inválido si la colección se modifica fuera de los métodos del propio iterador (iterator.remove()).
Algunas implementaciones de colecciones pueden ser "fail-fast" y lanzar específicamente ConcurrentModificationException al detectar tales cambios, para evitar comportamientos impredecibles.
La única forma segura de modificar la colección durante la iteración es usar el método iterator.remove().
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IteratorModificationExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
if ("B".equals(element)) {
// Esto provocará una ConcurrentModificationException
// list.remove(element);
// Forma segura de eliminar
iterator.remove();
}
}
System.out.println(list);
}
}