Java pour la boucle vs boucle while. Différence de Performance?
Assumer, j'ai le code suivant, il y a trois boucle for pour faire quelque chose. Serait-il courir vite si je change le plus extérieur de la boucle pour boucle while? merci~~
int length = 200;
int test = 0;
int[] input = new int[10];
for(int i = 1; i <= length; i++) {
for (int j = 0; j <=length - i; j++) {
for (int k = 0; k < length - 1; k++) {
test = test + input[j + k];
}
}
}
Il va optimiser pour test = 0; car le tableau n'est pas renseigné si test = test + entrée[j + k]; sera toujours zéro.
Temps! aussi idk java, mais je sais en perl C style pour les boucles sont plus lents que les boucles while esp dans le cas de la lecture de fichiers.
Temps! aussi idk java, mais je sais en perl C style pour les boucles sont plus lents que les boucles while esp dans le cas de la lecture de fichiers.
OriginalL'auteur | 2009-07-22
Vous devez vous connecter pour publier un commentaire.
Pas, changer le type de la boucle ne serait pas question.
La seule chose qui peut le rendre plus rapide serait d'avoir moins d'imbrication de boucle, et en boucle sur les valeurs.
La seule différence entre un
for
boucle et unwhile
boucle est la syntaxe pour la définition. Il n'y a pas de différence de performances à tous.Est la même chose que:
(En fait, la boucle for est un peu mieux parce que la
i
sera hors de portée après la boucle tandis que lai
coller autour de lawhile
boucle cas.)D'une boucle for est juste un point de vue syntaxique plus jolie façon de bouclage.
Une boucle for et un peu de temps de la boucle est en fait légèrement différents, en raison de comment continuer à se comporte. L'incrémentation se produit toujours dans la boucle alors que de continuer dans la boucle serait ignorer, ce qui provoque la boucle pour aller à l'infini.
Pourquoi n'est-ce pas la bonne réponse? À mon humble avis c'est ce qui explique exactement comment travailler avec ces boucles.
OriginalL'auteur jjnguy
Ce genre de micro-optimisation est inutile.
OriginalL'auteur Bombe
vous ne pouvez pas l'optimiser en modifiant à tout.
vous pouvez simplement incrément de vitesse très très très très peu en changeant la ligne
par
où lengthMinusOne est calculée avant
cette soustraction est juste calcul de près (200x201/2) x (200-1) fois et il est très petit nombre pour ordinateur 🙂
Heh, j'étais à moitié quelqu'un attend de suggérer de changer de
k++
à++k
😀vous permettra d'économiser de très très très très peu de temps de compilation. La plupart des compilateurs maintenant de soutenir de telles optimisations case stackoverflow.com/questions/5981460/...
OriginalL'auteur ufukgun
Quelqu'un a suggéré de tester
while
vsfor
boucles, j'ai donc créé un code pour tester si les boucles while ou pour les boucles ont été les plus rapides; en moyenne, plus de 100 000 tests,while
boucle a été plus rapide ~95% du temps. J'ai peut-être codés de manière incorrecte, je suis assez nouveau dans le codage, d'autant plus si je ne courait de 10 000 boucles qu'il a fini par être tout à fait bien dans la course de durée.modifier je n'ai pas changer toutes les valeurs de tableau quand je suis allé tester pour plus d'essais. Il fixe, de sorte qu'il est plus facile de changer la façon dont de nombreuses épreuves vous exécutez.
OriginalL'auteur Sleepy
Même si l'hypothèse de la boucle while étant plus rapide que la boucle était vrai (et il n'est pas), les boucles que vous auriez dû modifier/optimiser ne serait pas de l'extérieur mais de l'intérieur, car celles-ci sont exécutées plusieurs fois.
OriginalL'auteur fortran
La différence entre les pour et tout est sémantique :
C'est un moyen d'aider les autres à comprendre votre code. Vous n'êtes pas obligé de ne pas modifier pour les variables de boucle, mais il est courant (et bonnes) pratiques.
OriginalL'auteur Clement Herreman
voici une lien à un article sur le sujet
selon elle, le moment et Pour sont presque deux fois plus vite, mais les deux sont les mêmes.
MAIS cet article a été écrit en 2009 et donc je l'ai essayé sur ma machine et voici les résultats:
donc je suppose que la meilleure chose, c'est juste le temps sur votre propre version de la machine et de et de conclure que
OriginalL'auteur levtatarov
Non, vous êtes toujours en boucle le même nombre de fois. N'importe pas.
OriginalL'auteur aquinas
Regardez votre algorithme! Faites-vous connaître à l'avance les valeurs de votre tableau sont ajoutés plusieurs fois?
Si vous savez que vous pourriez réduire le nombre de boucles et qui permettrait d'aboutir à de meilleures performances.
OriginalL'auteur Roalt
Il ne serait d'importance si vous utilisez le multi-thread ou plusieurs processeurs de programmation. Il serait dépend de la façon dont vous affectez les boucles pour les différents processeurs/threads.
OriginalL'auteur Extrakun
Il n'y aurait pas de différence de performances. L'essayer!
La JVM et de plus, le compilateur, serait de faire deux boucles en quelque chose comme
OriginalL'auteur Adrian
Quelqu'un a essayé comme ça...
Par rapport à:
OriginalL'auteur Danilo Castro
En Boucle et en boucle sont même
http://www.mkyong.com/java/while-loop-for-loop-and-iterator-performance-test-java/
L'article n'est même pas dire que la boucle While est plus rapide que la boucle For.
OriginalL'auteur Abhishek Gaikwad
Sur cette base: https://jsperf.com/loops-analyze (pas créé par moi) de la boucle while est de 22% plus lente qu'une boucle for en général. Au moins en Javascript, il est.
OriginalL'auteur Arash R