2009-08-07 12 views
19

soy bastante nuevo en Java y en otra pregunta desbordamiento de pila sobre for loops una respuesta dijo que había dos usos en Java:Usos de 'para' en Java

for (int i = 0; i < N; i++) { 
} 


for (String a : anyIterable) { 
} 

sé que el primer uso de para y lo he usado mucho, pero nunca he visto el segundo. ¿Qué es lo que solía hacer y cuándo lo usaría?

Respuesta

33

El primero de los dos que especifica es un lazo clásico C for. Esto le da al programador el control sobre los criterios de iteración y permite tres operaciones: la inicialización; la prueba de bucle; la expresión de incremento A pesar de que se utiliza a menudo para repetir de forma incremental para un número determinado de intentos, como en el ejemplo yor:

for (int i=0; i < N : i++) 

Hay muchos más ejemplos en código donde el for era uso para iterar sobre colecciones:

for (Iterator iter = myList.iterator(); iter.hasNext();) 

Para alentar la repetición del segundo tipo (donde a menudo no se utilizaba la tercera cláusula), y para complementar el Generics introducido en Java 1.5, se introdujo el segundo de sus dos ejemplos: el bucle forzado mejorado o el for-each loop.

El segundo se usa con matrices y colecciones genéricas. See this documentation. Le permite iterar sobre una colección genérica, donde conoce el tipo de Collection, sin tener que convertir el resultado del Iterator.next() en un tipo conocido.

Compare:

for(Iterator iter = myList.iterator; iter.hasNext() ;) { 
    String myStr = (String) iter.next(); 
    //...do something with myStr 
} 

con

for (String myStr : myList) { 
    //...do something with myStr 
} 

Este 'nuevo estilo' de lazo se puede utilizar con matrices así:

String[] strArray= ... 
for (String myStr : strArray) { 
    //...do something with myStr 
} 
+0

o matriz. O colección regular si su variable es de tipo Objeto :-) – ChssPly76

+3

No es exclusivo de colecciones genéricas. –

+0

@pavel: estoy dispuesto a hacer de esto una respuesta wiki si quieres agregar más. – akf

1

Se utiliza para iterar a través de toda una array o colección Iterable. Básicamente se sustituye:

for(int i=0; i<N.length; i++) 

y se puede utilizar con los genéricos, que es bastante fresco

4

El "en el" bucle es en su mayoría los ojos dulces que hace que el código más fácil de leer. (Si pronuncias el: como "en").

Uso el segundo tipo casi exclusivamente en mi propio código cada vez que estoy iterando sobre una lista o matriz.

Todavía utilizo el bucle for para cuando se trata principalmente de código matemático, o cuando necesito una "i" para ver cuántas veces he realizado un bucle.

1

Se llama para cada bucle y, básicamente, se puede utilizar con cualquier cosa que implementa

java.lang.Iterable 

colecciones genéricas implementan esta interfaz, pero que podría hacer su propia clase que lo hizo así. Hace que tratar con todo en una lista/colección sea muy fácil, aunque la desventaja es que no obtienes acceso explícito al número actual en la lista como lo haces en el ciclo tradicional.Hay cierta sobrecarga adicional asociada con este tipo de bucle sobre bucles tradicionales debido a las llamadas a las clases de iterador.

0

Ambos son iguales en funcionalidad, pero para (Cadena A: anyIterable) {}, es más fácil de leer, escribir menos y más cortas. for (int i = 0; i < N: i ++) índice de la colección, por control de bucle variable de i y para (String a: anyIterable) {} no indexa la colección