web-dev-qa-db-fra.com

Utilisations de 'for' en Java

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

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


for (String a : anyIterable) {
}

Je connais la première utilisation de for et l’utilise beaucoup, mais je n’ai jamais vu la deuxième. À quoi sert-il et quand l'utiliser? 

23
Josh Curren

Le premier 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 incrémentée. Bien qu'il soit souvent utilisé pour répéter de manière incrémentielle un nombre de tentatives défini, comme dans votre exemple:

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

Il y a beaucoup plus d'instances dans le code où la for était utilisée pour itérer sur des collections: 

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

Pour atténuer la fusion du deuxième type (où la troisième clause était souvent utilisée) et compléter le Generics introduit dans Java 1.5, le deuxième de vos deux exemples - la boucle for améliorée ou le for-each loop - a été présenté. 

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

Comparer:

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 de boucle peut également être utilisé avec des tableaux:

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

La boucle "for in" est principalement une application qui facilite la lecture du code. (Si vous prononcez le: comme "in").

J'utilise le second type presque exclusivement dans mon propre code chaque fois que je parcours une liste ou un tableau.

J'utilise toujours la boucle for normale lorsque je traite principalement du code mathématique ou lorsque j'ai besoin d'un "i" pour voir combien de fois j'ai bouclé.

4
wm_eddie

Il est utilisé pour parcourir un tableau entier ou une collection Iterable. Il remplace fondamentalement:

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

Et peut être utilisé avec des génériques, ce qui est plutôt cool

1
Paul

Cela s'appelle un pour chaque boucle et, fondamentalement, il peut être utilisé avec tout ce qui implémente 

Java.lang.Iterable

Les collections génériques implémentent cette interface, mais vous pouvez également créer votre propre classe. Il est très facile de gérer tout ce qui se trouve dans une liste/collection, même si l’inconvénient est que vous n’obtenez pas un accès explicite au numéro actuel de la liste comme vous le faites dans la boucle traditionnelle. Ce type de boucle entraîne une surcharge supplémentaire par rapport aux boucles traditionnelles en raison des appels aux classes d'itérateurs.

1
Chris Thompson

Les deux ont les mêmes fonctionnalités, mais pour (String a: anyIterable) {} , est plus lisible, moins typé et plus court . pour (int i = 0; i <N : i ++) indexe la collection, par variable de contrôle de boucle i et pour (String a: anyIterable) {} n'indexe pas la collection 

0
RoshanS