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?
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
}
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é.
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
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.
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