Warum möchte ich in Android Studio For For anstelle von For Loop verwenden?

7

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?

    
user1714647 13.09.2015, 10:44
quelle

2 Antworten

25

Aus dem Buch: Effective Java (2. Auflage) von Joshua Bloch

  

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:

%Vor%
  

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 Ссылка :

%Vor%
  

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 von    one() 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.

    
Riddhesh Sanghvi 13.09.2015, 10:48
quelle
1

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.

    
Dici 13.09.2015 10:50
quelle