2011-12-07 11 views
5

tengo una lista:Lista vs Lista iterador

List<Object> myList = new ArrayList<Object>(); 

para llegar de esta lista hay dos métodos:

1.

for(Object obj : myList) 
{ 
    // some code 
} 

2.

Iterator<Object> objIt = myList.iterator(); 
while(obj.hasNext()) { 
    Object obj = (Object)objIt.next(); 
    // some code 
} 

Mi pregunta es cuál es eficiente en cuanto a la memoria y se itera rápidamente ?

+0

¿Qué quiere decir exactamente diciendo "para conseguir eso"? –

+1

http://stackoverflow.com/questions/2113216/which-is-more-efficient-a-for-each-loop-or-an-iterator –

+0

Utilice la búsqueda antes de hacer preguntas. Muchas preguntas ya han sido formuladas y respondidas aquí en Stack Overflow. Duplicado de: http://stackoverflow.com/questions/2113216/which-is-more-efficient-a-for-each-loop-or-an-iterator –

Respuesta

12

Hacen lo mismo: el lazo mejorado for es solo azúcar sintáctico para la versión de mano (para los iterables, para los arreglos es ligeramente diferente). A menos que necesite el iterador explícitamente (por ejemplo, para llamar al remove()) usaría la primera versión.

Consulte section 14.14.2 of the Java Language Specification para obtener más detalles sobre la transformación exacta realizada por el compilador.

+1

Estaba a punto de dar la respuesta similar. (Excepto la sección 14 ... parte) +1 para la velocidad. –

+0

La interfaz Iterable (http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html) indica que está diseñada para el bucle mejorado. Solo quería señalar la referencia de que son exactamente iguales. – pimaster

2

El primero de ellos es lo que se llama un "ciclo mejorado" que fue introducido en el JDK 1.5 +

Es la manera más conveniente de iteración a través de una lista. Además, no es necesario que realice fundiciones explícitas si está utilizando eso.

Desde la perspectiva del rendimiento, no creo que haya mucha diferencia entre los dos.

1

Mejorado para iterador utilizado solo dentro de él. Entonces ambos son lo mismo.

1

El primero es más claro, pero si desea eliminar elementos mientras visita la lista, su única opción es un iterador.

2

iterador: Te da el resultado cuando sea necesario y no recibe todo el resultado en memoria

3

El uso de un Iterator es un tanto acceso ahorrador para la List desde fuera del class definir como no se puede reemplazar accidentalmente el entero List por ejemplo. Solo puedes acceder a un elemento a la vez: el superior.

Por lo tanto, la directriz que utilizamos es solo utilizar el enfoque for each dentro de la clase de definición y siempre que se necesite acceder a la Lista desde el exterior, se debe usar un iterador. Esto también refuerza el concepto de mantener la lógica de cómo modificar un miembro dentro del class que lo contiene. Todas las operaciones complejas que se necesitan fuera tienen que implementarse en los métodos public dentro de ese class.

Cuestiones relacionadas