Maison >Java >javaDidacticiel >Boucle ou itérateur For-each : lequel est le plus efficace pour le parcours de collection ?
Question :
Lors de la navigation dans une collection, quel est le approche la plus efficace : une boucle for-each ou un itérateur ?
Extraits de code :
Pour chaque boucle :
List<Integer> a = new ArrayList<>(); for (Integer integer : a) { integer.toString(); }
Itérateur :
List<Integer> a = new ArrayList<>(); for (Iterator iterator = a.iterator(); iterator.hasNext();) { Integer integer = (Integer) iterator.next(); integer.toString(); }
Évaluation :
1. Lecture des valeurs de collection :
Lorsque vous parcourez simplement une collection pour accéder aux valeurs, les itérateurs et les boucles for-each ont une efficacité équivalente car la boucle for-each utilise en interne des itérateurs.
2. Boucles de style C contre itérateurs :
Contrairement aux itérateurs et aux boucles for-each, les boucles traditionnelles de « style C » qui accèdent aux éléments via get(i) peuvent présenter des inconvénients en termes de performances. Get(i) a une complexité O(n) pour certaines structures de données, telles que les listes chaînées, conduisant à une complexité temporelle globale O(n2) pour la boucle.
3. Efficacité des itérateurs :
Les itérateurs garantissent la complexité temporelle O(1) pour next(), rendant les boucles O(n).
4. Comparaison du bytecode :
L'examen du bytecode généré pour les boucles for-each et les itérateurs révèle qu'ils sont pratiquement impossibles à distinguer, ce qui n'indique aucune différence de performances intrinsèque.
Conclusion :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!