Maison >Java >javaDidacticiel >Boucle ou itérateur For-each : lequel est le plus efficace pour le parcours de collection ?

Boucle ou itérateur For-each : lequel est le plus efficace pour le parcours de collection ?

DDD
DDDoriginal
2024-11-25 15:24:101046parcourir

  For-each Loop or Iterator: Which is More Efficient for Collection Traversal?

Boucle for ou itérateur amélioré : évaluation de l'efficacité des boucles

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 :

  • Optez pour une boucle for-each ou un itérateur lorsque seul itérer à travers une collection.
  • Préférez la boucle for-each pour sa concision et sa lisibilité, à moins que l'efficacité ne soit primordiale.
  • Soyez conscient des inconvénients potentiels en termes de performances des boucles traditionnelles de style C dans certains scénarios impliquant obtenir(je).

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn