para cada bucle vs. iterator: eficiencia en la colección traversal
introduction
cuando la colección en java, la opción, la opción iba entre un bucle for-bucle e iterator. Este artículo explora las diferencias de eficiencia entre estos dos enfoques.
para el bucle
introducido en Java 5, el bucle for-ENTRA (también conocido como el mejor para el bucle) es un sintoxis conciso y fácil de leer para la exigencia sobre las colecciones. Utiliza el iterador internamente:
Lista = new ArrayList(); for (Integer integer : a) { integer.toString(); }
iterator
Un iterator proporciona una interfaz estandarizada para iteraciones sobre colecciones. Permite el control personalizado sobre el proceso de traversal.
Lista = new ArrayList(); for (Iterator iterator = a.iterator(); iterator.hasNext();) { Integer integer = iterator.next(); integer.toString(); }
comparación de eficiencia
Para un acceso simple de solo lectura a una colección, prácticamente no hay diferencia de rendimiento entre el bucle for-ENTRES y el enfoque de Iterator. Sin embargo, el bucle for-Eat-Earl usa internamente el mecanismo de iterador.
, si se usa el bucle tradicional "estilo C" con get (i):
for (int i = 0; iEl enfoque de Iterator (tanto para el bucle y el iterador explícito) puede ser significativamente más eficiente para ciertas estructuras de datos. Por ejemplo, en una lista vinculada, Get (i) es una operación O (n). Using an iterator's O(1) next() operation ensures the loop runs in O(n) time, whereas the get(i) loop would run in O(n2) time.
Bytecode Comparison
To confirm that the for-each loop uses the iterator mechanism, we can compare the generated bytecode para ambos enfoques:
for-Each Loop
Lista = new ArrayList(); for (Integer integer : a) { integer.toString(); } ALOAD 1 INVOKEINTERFACE java/util/List.iterator()Ljava/util/Iterator; ASTORE 3 ...iterator
Lista = new ArrayList(); for (Iterator iterator = a.iterator(); iterator.hasNext();) { Integer integer = iterator.next(); integer.toString(); } ALOAD 1 INVOKEINTERFACE java/util/List.iterator()Ljava/util/Iterator; ASTORE 2 ...Como puede observar, el bytecode generado es idéntico, lo que indica que no hay penalización de rendimiento en el uso de un enfoque.
conclusion
en resumen, cuando avanza una colección para el acceso a solo lectura, la diferencia entre un bucle para el bucle y un iterator es mínimo. El iterador solo ofrece ventajas cuando se trabaja con estructuras de datos específicas o que requieren un comportamiento de iteración personalizado. Por simplicidad y legibilidad, el bucle for-ENTRA es generalmente la opción preferida.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3