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
Libérer: 2024-11-25 15:24:10
original
1053 Les gens l'ont consulté

  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();
}
Copier après la connexion

Itérateur :

List<Integer> a = new ArrayList<>();
for (Iterator iterator = a.iterator(); iterator.hasNext();) {
  Integer integer = (Integer) iterator.next();
  integer.toString();
}
Copier après la connexion

É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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal