Est-il plus lent de parcourir une liste en Java comme celle-ci:
for (int i=0;i<list.size();i++) {
.. list.get(i)
}
par opposition à:
for (Object o: list) {
... o
}
Est-il plus lent de parcourir une liste en Java comme celle-ci:
for (int i=0;i<list.size();i++) {
.. list.get(i)
}
par opposition à:
for (Object o: list) {
... o
}
Je suppose que vous demander de sortir de la pure curiosité et de ne pas citer Knuth (quelqu'un sera probablement).
Je crois qu'une fois que votre code est compilé, il ne fait pas de différence. Cela ne faire une différence avant (exemple 2 est beaucoup plus concis et lisibles), donc aller pour le numéro 2, et ne se soucient pas du reste.
Juste mes 2 cents
MODIFIER
Noter que votre code dans l'extrait numéro 1 calcule
list.size()
chaque fois que la boucle s'exécute, qui pourrait le rendre encore plus lent que le numéro 2ENCORE UNE AUTRE ÉDITION
Quelque chose que j'avais à faire une double vérification, Joshua Bloch recommande l'utilisation d'
for each
boucles (voir l'article 46, de de Efficace Java). Je crois que les extrémités de toutes sortes de discussions. Merci Josh! :)
Selon les tests de référence dans la boucle While, Pour la boucle et Itérateur Test de Performance, de Java et de la JavaRanch question "est à l'aide de ArrayList.iterator() est plus rapide que la boucle ArrayList en boucle?" l'itérateur est en fait un peu plus lent.
J'avais toujours en faveur de la lisibilité à moins que je l'avais étalonné mon ensemble de l'application et a constaté que la boucle soit mon goulot d'étranglement, si.
IL PEUT Y AVOIR UNE DIFFÉRENCE.
Si une Liste de mise en œuvre implémente java.util.RandomAccess (comme ArrayList n'), alors il est juste plus rapide à utiliser sa méthode get() sur une interator.
Si elle ne met pas en œuvre de java.util.RandomAccess (par exemple, LinkedList ne fonctionne pas), alors il est beaucoup plus rapide d'utiliser un itérateur.
Toutefois, cela ne importe si vous utilisez des listes contenant des milliers d' (éventuellement dispersés) des objets ou qui sont sans cesse parcourue (comme si l'exécution de grandes quantités de mathématiques sur la Liste des objets représentant des vecteurs numériques.)
Créé un microbenchmark pour la question et a été surpris de voir pour chaque runing 2x-3x plus vite qu'un indexés boucle. La seule explication que j'ai, c'est que pour chaque version peut ne pas avoir besoin de la gamme des vérifications qui sont faites par des ArrayList.get(int index).
Pour les très petites listes (10 éléments), le résultat était le même. Pour 100 éléments pour-chaque est de 1,5 x plus vite, pour 10000-100000 éléments, il est plus rapide 2x-3x fois.
Les tests sont exécutés sur un aléatoire dataset et les sommes de contrôle sont en cours de vérification à la fin, donc JIT chearing est très peu probable que de prendre place dans ces.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.