2012-06-14 13 views

Respuesta

31

Muchas de las colecciones de Java producen iteradores que son "rápidos", lo que significa que si la colección se cambia después de crear un iterador, el iterador se invalidará y lanzará un ConcurrentModificationException tan pronto como sea posible. (En comparación con fallar más tarde o devolver datos no válidos.)

Para admitir esta funcionalidad, la colección debe realizar un seguimiento de si se ha modificado. Cada vez que se cambia la colección, aumenta modcount. Cuando la colección produce un iterador, el iterador almacena el valor de modcount desde el momento de su creación. Luego, cada vez que intente utilizar el iterador, comprueba si su guardado modcount es diferente del modcount actual de la colección principal; si es así, el iterador falla con un ConcurrentModificationException.

(Una excepción a esta regla es que las modificaciones a la colección hecha a través del repetidor en sí (como el método del iterador remove) no invalidan el iterador.)

+1

gracias por esta explicación muy buena. Sabía que hizo algo como esto, pero no detalló – moeTi

+0

Muy buena explicación. Ahora tiene sentido. –

+0

código: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/ArrayList.java#ArrayList.ListItr – roottraveller

Cuestiones relacionadas