2010-09-02 4 views

Respuesta

7

Eso no sería thread safe. La colección solo podría mantener una "posición actual" por lo que no podría iterar sobre ella simultáneamente en dos subprocesos diferentes.

Tener iteradores permite múltiples iteraciones simultáneas que no se pisan los dedos del otro.

+1

... siempre y cuando no modifiquen la colección a la que apuntan. En este último caso, se lanzará una ConcurrentModificationException. – gawi

9

Porque puede tener varios objetos válidos Iterator para el mismo objeto Collection simultáneamente.

Esto puede ser útil. Si Collection definió los métodos next y hasNext, este enfoque quedaría excluido.

+0

¿Iterador múltiple? ¿Podría ofrecer un ejemplo? –

+0

Shengyuan Lu: múltiples iteradores podrían surgir mediante el uso de hilos como señala John Kugelman en su respuesta. –

+0

También hay casos en los que desearía más de un 'iterador' de un solo hilo. Cualquier estructura de datos donde necesites un vistazo detrás, por ejemplo. – Borealid

2

El motivo principal es que la colección debería tener iteración "estado". No podría admitir múltiples iteraciones al mismo tiempo. Las matrices PHP tienen algo así como un estado de iteración integrado y me confundió.

3

Entiendo que la razón para tener los iteradores excluidos de la colección es que puede haber muchos tipos de ellos (que no sean simplemente avanzar en la colección). Puede crear su propio iterador para retroceder o hacer algo como iterar a través de un gráfico DOM visitando todos los nodos.

Cuestiones relacionadas