En realidad, acabo de encontrar la respuesta en StackOverFlow (¿Por qué iterar sobre una Lista sería más rápido que indexarla?)
Un bucle for es ineficiente porque para acceder e imprimir cada elemento, tendría que hacer:
cabeza -> cabeza de impresión
cabeza -> item1 -> print item1
cabeza -> elemento1 -> elemento2 -> imprimir elemento2
cabeza -> item1 -> item2 -> item3 imprimir item3
- ¿Hay un sitio como el Proyecto Euler pero sobre matemáticas puras?
- ¿Cómo verificamos la inexistencia de un camino hamiltoniano?
- ¿Cuál es la complejidad computacional de la satisfacción de resolución de restricciones sobre enteros? He leído que es polinomial para las igualdades y NP-duro para las desigualdades, pero, ¿no puedes convertir siempre una restricción de desigualdad en una igualdad agregando vars de holgura?
- Apelo en matemáticas pero quiero obtener un título de CS porque me encanta la programación. ¿Qué tengo que hacer? ¿Hay alguna alternativa?
- ¿Cuál es la interpretación de XOR de los enteros? ¿Hay alguna forma simple de calcular XOR en lugar de 'XOR-ing' todos los bits individuales?
Como puede ver, con cada iteración, comienza con el comienzo (encabezado) e itera a través de cada nodo.
Esto se vuelve terriblemente ineficiente O (N * N) a medida que terminas repasando cada elemento una y otra vez.
Si usa cualquiera de las formas de Iterator, la JVM solo tiene que hacer
cabezal -> cabezal de impresión -> elemento1 -> elemento de impresión1 -> elemento2 -> elemento de impresión2, etc.
lo cual no implica repetición.
Tl; Dr: una iteración for-loop a través de LinkedList lleva mucho más tiempo ya que restablece su posición con cada iteración, a diferencia de un iterador que itera directamente (como un for-loop en una matriz normal)