Por lo que puedo decir, la razón se puede encontrar en la parte de javadoc que no citó (énfasis debajo del mío):
Un iterador para listas que permite al programador recorrer la lista en cualquier dirección, modificar la lista durante la iteración ...
Verá, el propósito previsto es permitir el uso mientras se modifica la lista. Las posibles modificaciones aparentemente incluyen la eliminación de los elementos.
Ahora piense en lo que sucedería si eliminamos un elemento que sería current()
para el iterador, suponiendo que ese iterador tuviera una noción de elemento actual. En este contexto, la forma de implementarlo sin una noción de elemento actual tiene bastante sentido para mí, porque de esa manera, el iterador no tiene que preocuparse por la eliminación de elementos.
Es importante tener en cuenta que javadoc no requiere que las implementaciones de interfaz sean seguras para subprocesos.
- Debido a eso, uno no debería esperar el manejo correcto de las modificaciones realizadas desde diferentes subprocesos; para eso, la implementación tendría que proporcionar medios adicionales para sincronizar el acceso, garantizar la visibilidad, etc., según lo especificado por el Modelo de Memoria Java según JSR 133 .
De lo que ListIterator es capaz es de manejar las modificaciones realizadas desde el mismo hilo al iterar. No todos los iteradores son así, ConcurrentModificationException javadocs advierte específicamente sobre esto:
... Tenga en cuenta que esta excepción no siempre indica que un objeto ha sido modificado simultáneamente por un hilo diferente. Si un solo hilo emite una secuencia de invocaciones de métodos que viola el contrato de un objeto, el objeto puede lanzar esta excepción. Por ejemplo, si un hilo modifica una colección directamente mientras está iterando sobre la colección con un iterador rápido, el iterador lanzará esta excepción ...