Diese Frage hat mich um Zeit gekämpft. Warum möchte Android Studio manchmal For For Each anstelle von For Loop verwenden, da ich For For Loop erhalte, wenn ich eine Warnung erhalte, die ich für jeden verwenden kann (und mit Alt + Enter schlägt es mir den Autofix vor).
Nehmen wir zum Beispiel an, wir haben diesen Code
%Vor%Ich bekomme eine Warnung
und das ist die von Android Studio vorgeschlagene Lösung
%Vor%Ist es leistungsfähiger? Es gibt einen Grund, warum ich eine Warnung für die Verwendung von for for loop bekommen sollte?
Oder wenn es für die Schleife oder für jeden besser ist?
Aus dem Buch: Effective Java (2. Auflage) von Joshua Bloch
%Vor%Die for-each-Schleife, die in Version 1.5 eingeführt wurde, beseitigt das Durcheinander und die Möglichkeit eines Fehlers, indem der Iterator oder der Index verborgen wird Variable vollständig. Das resultierende Idiom gilt gleichermaßen für Sammlungen und Arrays:
Wenn Sie den Doppelpunkt (:) sehen, lesen Sie ihn als "in". Daher liest sich die obige Schleife wie "für jedes Element e in Elementen". Beachten Sie, dass es keine gibt Leistungseinbußen für die Verwendung der for-each-Schleife, auch für Arrays. Im Tatsächlich kann es einen leichten Leistungsvorteil gegenüber einem gewöhnlichen anbieten Schleife in einigen Fällen, da es das Limit des Arrays berechnet Index nur einmal. Während Sie dies von Hand (Punkt 45) tun können, Programmierer mach das nicht immer.
Hier ist ein Vergleich von Ссылка :
zero()
ist am langsamsten, weil das JIT noch nicht die Kosten von Erhalten der Array-Länge einmal für jede Iteration durch die Schleife.
one()
ist schneller. Es zieht alles in lokale Variablen, Vermeiden Sie die Lookups. Nur die Array-Länge bietet eine Performance profitieren.
two()
ist am schnellsten für Geräte ohne JIT und nicht unterscheidbar vonone()
für Geräte mit einem JIT. Es verwendet die erweiterte for-Schleife-Syntax Einführung in Version 1.5 der Programmiersprache Java.Sie sollten also standardmäßig die erweiterte for-Schleife verwenden, aber überlegen Sie sich a Handgeschriebene Zählschleife für die Performance-kritische ArrayList Iteration.
Es ist nur besser lesbar, wenn Sie nur iterieren, ohne vorwärts oder rückwärts zu schauen. Nun, es ist lesbar, wenn Sie einen guten Variablennamen wählen (im Gegensatz zu anArray
für ein String
: D). Es ist auch ein bisschen sicherer, denn wenn Sie ein wirklich dummer Programmierer wären, könnten Sie array[2 * i]
schreiben und ein ArrayOutOfBoundsException
werfen. Abgesehen davon finde ich es ein wenig übertrieben, Sie zu bitten, das zu reformieren ... das ist eine gängige Sprache in Java.
Tags und Links java android-studio foreach for-loop