2009-08-07 7 views
19

Je suis assez nouveau à Java et dans une autre question Stack Overflow à propos for loops une réponse dit qu'il y avait deux utilisations pour en Java:utilisations de « pour » en Java

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


for (String a : anyIterable) { 
} 

Je sais que la première utilisation et je l'ai beaucoup utilisé, mais je n'ai jamais vu le second. Que fait-il et quand l'utiliserais-je?

Répondre

33

La première des deux que vous spécifiez est une boucle C for classique. Cela donne au programmeur le contrôle sur les critères d'itération et permet trois opérations: l'initialisation; le test de boucle; l'expression d'incrément. Bien qu'il soit souvent utilisé pour répéter progressivement pour un certain nombre de tentatives, comme dans l'exemple yor:

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

Il y a beaucoup d'autres cas dans le code où le for était utilisé pour itérer sur les collections:

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

Pour alléger la mise en place du second type (où la troisième clause était souvent inutilisée), et pour compléter le Generics introduit dans Java 1.5, le deuxième de vos deux exemples - la boucle améliorée pour, ou le for-each loop - a été introduit.

La seconde est utilisée avec les tableaux et les collections génériques. See this documentation. Il vous permet de parcourir une collection générique, où vous connaissez le type de Collection, sans avoir à convertir le résultat du Iterator.next() en un type connu.

Comparez:

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

avec

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

Ce 'nouveau style' pour la boucle peut être utilisée avec des tableaux ainsi:

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

ou un tableau. Ou collection régulière si votre variable est de type Objet :-) – ChssPly76

+3

Elle n'est pas exclusive aux collections génériques. –

+0

@pavel - Je suis prêt à en faire une réponse wiki si vous voulez en ajouter d'autres. – akf

1

Il est utilisé pour itérer un ensemble tableau ou collection Iterable. Il remplace essentiellement:

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

et peut être utilisé avec Génériques qui est assez cool

4

Le « dans » la boucle est la plupart du temps eye-candy qui rend plus facile à lire le code. (Si vous prononcez le: comme "dans").

J'utilise presque exclusivement le second type dans mon propre code chaque fois que je fais une itération sur une liste ou un tableau. J'utilise toujours la boucle régulière pour traiter un code mathématique, ou lorsque j'ai besoin d'un «i» pour voir combien de fois j'ai bouclé.

1

Il est appelé pour chaque boucle et fondamentalement, il peut être utilisé avec tout ce qui met en œuvre

java.lang.Iterable 

collections génériques implémentent cette interface, mais vous pouvez faire votre propre classe qui a fait aussi bien. Cela rend le traitement de tout ce qui se trouve dans une liste/collection très facile bien que l'inconvénient est que vous n'obtenez pas un accès explicite au numéro actuel dans la liste comme vous le faites dans la boucle traditionnelle.Un surcoût supplémentaire est associé à ce type de boucle par rapport aux boucles traditionnelles en raison des appels aux classes d'itérateur.

0

deux d'entre eux sont même fonctionnalité, mais pour (String a: anyIterable) {}, est plus lisible, moins de frappe et plus courte. for (int i = 0; i < N: i ++) index de la collecte, par la commande de boucle variable i et pour (String a: anyIterable) {} ne indexe la collection

Questions connexes