Sí, todavía necesitamos iteradores!
1) Looping a través de listas vinculadas es O(n^2)
en tiempo sin iteradores.
for (int i = 0; i < list.size(); i++)
list.get(i).foo();
Para llegar al elemento # 5, la lista comienza en el elemento de cabeza y sigue a 4 enlaces.Para llegar al elemento # 6 en el siguiente ciclo, comienza de nuevo en la cabecera, siguiendo todos los mismos enlaces (más uno). Un iterador sería lo suficientemente inteligente como para recordar la última posición, dando O(n)
. ¡Mucho más rápido!
2) Hay un problema con size()
. A veces aún no sabes el tamaño. Algunos hilos del productor podrían estar agregando elementos, mientras que otro hilo quiere comenzar a leer. Si primero necesita el tamaño, (for(i=0;i<size;i++)
), no puede iniciarse antes de que el hilo productor haya finalizado.
Una colección puede ser tan grande, que los elementos no encajan en la memoria todos juntos. Un iterador solo proporciona acceso a un elemento a la vez, por lo que debe caber en un solo elemento.
3) ¿Cómo recorrer todos los elementos de un árbol? Escribir ese código libre de errores no es tan simple. Afortunadamente, puede obtener un iterador para todos los elementos en el árbol e iterar felizmente a través de ellos, sin tener que preocuparse por el orden ni nada.
El iterador oculta cómo se almacenan los elementos y solo proporciona acceso, una buena abstracción.
no, crea iteradores, pero no es en sí un iterador –
Así que no necesito aprender mucho sobre iterador ya que es hecha listo para mí !!! derecho ? – kevin
@kevin: No hay mucho que aprender. Es un patrón simple :) –