Java-Best-Practice-Methode

8

Was ist der beste Weg, um ein Array zu durchlaufen, wenn Sie den Index benötigen?

Option 1:

%Vor%

Option 2:

%Vor%

Oder spielt es keine Rolle? Oder gibt es einen besseren Weg? Um nur die Unterschiede aufzuzeigen: In einem Fall wird die Länge des Arrays als Teil des Tests in der Schleife ausgewertet, obwohl der Compiler dies normalerweise optimieren sollte.

Zweitens, ist ++i hier anders als i++ ? Ich bevorzuge definitiv ++i , wenn es C ++ ist, bin aber nicht sicher für Java.     
Marshall Farrier 29.09.2012, 02:39
quelle

4 Antworten

6

i++ vs ++i spielt in diesem Fall keine Rolle. Während C-Master Ihnen empfehlen, array.length in einer Variablen zu speichern, machen moderne Optimierungs-Compiler dies in diesem Fall überflüssig, solange sich die Länge in der Schleife nicht ändert. Wenn Sie wirklich besorgt sind, können Sie beide Benchmarks durchführen, aber da .length nicht jedes Mal das gesamte Array durchlaufen muss, sind Sie in Ordnung.

    
Dan 29.09.2012, 02:43
quelle
6

Im Allgemeinen sind diese beiden Methoden gleichwertig. Sie sollten das in

beachten %Vor%

Das foo() wird einmal vor jeder Iteration aufgerufen (im Gegensatz zu nur einmal vor der ersten Iteration), also sollten Sie dies für kompliziertere Situationen berücksichtigen, indem Sie vielleicht etwas wie

tun %Vor%

entspricht Ihrer Option 1 . Also würde ich sagen, dass Option 1 sicherlich die sicherere der beiden ist, aber die meiste Zeit sollte es keinen signifikanten Unterschied machen, den Sie verwenden.

Wie bei Ihrer zweiten Frage: ++i erhöht zuerst Ihre Variable und ruft dann ihren Wert ab, i++ ruft zuerst den Wert ab und erhöht sie dann. Probieren Sie diese zwei Code-Teile aus:

%Vor%

Der erste Ausdruck 1 , aber der zweite Ausdruck 0 . Natürlich, wenn ++i und i++ allein sind, macht das keinen Unterschied.

    
arshajii 29.09.2012 02:45
quelle
0

für die Verwendung von "array.length" in For-Schleife: In der Regel führt der Compiler eine Optimierung durch, was der Verwendung einer Variablen in der for-Schleife entspricht

für "i ++" und "++ i" In C ++ ist ++ i bevorzugt und effizienter, aber in Java sind sie in diesem Fall äquivalent.

    
user1107832 29.09.2012 03:12
quelle
0

Zusätzlich zur arshaji-Antwort wollte ich wissen, ob es einen Leistungsvorteil gibt, size() in einer Schleife zu verwenden oder im Voraus zu speichern. Ich glaube, das Ergebnis zeigt, dass der Compiler die Dinge optimiert und der Zugriff auf die Länge einer Liste derselbe wie der Zugriff auf eine Variable ist (ich hatte Angst, dass die Tatsache, dass sie eine Funktion durchlaufen musste, die Dinge verlangsamen würde).

Hier ist die Zeit, die es für diese zwei für unterschiedliche Methode der Schleife dauert:

%Vor%

Hier ist das Ergebnis für eine Liste von zehn Millionen Elementen:

%Vor%     
Ced 03.06.2016 23:50
quelle

Tags und Links