2016-05-09 8 views
2

Ich bekomme arraylist.get(i) jedes Mal, wenn eine Schleife mehr als dreimal innerhalb der Schleife ausgeführt wird.Welche ist vorzuziehen?

Ist es ratsam oder soll ich es in separaten Variablen speichern und dann immer wieder verwenden? Welche ist leistungsmäßig zu bevorzugen?

+2

i ist eine Zustandsvariable, nur eine Zahl. –

+0

'Get 'es einmal und dann verwenden Sie es durchweg. – robotlos

+0

Ich würde sagen, Sie verlieren nicht viel, und der Leistungsschub ist vernachlässigbar. Ein Blick auf die Quelle [ArrayList] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/ArrayList.java#ArrayList.elementData%28int% 29), es ist nur eine Bereichsüberprüfung, um zu sehen, ob "i" innerhalb der Grenzen der Größe ist, und gibt das Element von einem Array zurück. –

Antwort

4

Die Einstellung auf eine Variable ist etwas effizienter. Accessing ArrayList.get (I) ist O (1), kostet aber immer noch etwas, obwohl es wirklich unbedeutend und unbedeutend ist. Einstellung auf eine Variable ist meiner Meinung nach lesbarer.

2

erklärt und eine Variable einmal wie String myString = arraylist.get(i); Zuordnung wird geringfügig schneller als arraylist.get(i) mehrfach aufgerufen wird.

Sobald Sie dies getan haben, können Sie alle Methoden auf der myString Instanz aufrufen.

Ich nehme an, dass arraylist vom Typ ArrayList<String> ist.

Sie können eine NULL-Prüfung in der Schleife enthalten sein sollen auch:

for(int i = 0; i < arraylist.size(); i++){ 
    String myString = arraylist.get(i); 
    if(myString != null){ 
     //any calls to methods on myString 
    } 
} 
4

Es ist immer ein guter Ansatz lesbar und wartbar Code zu schreiben. Da Ihre Frage sehr breit ist, erwarten Sie auch breite Antworten.

Jetzt ist dies eine einmalige Zuweisung, aber Sie können es mehrmals verwenden. Jetzt, zum Beispiel, müssen Sie die Logik des Programms ändern, so dass Sie immer i+1 bekommen wollen, es wird Ihnen leicht sein, nur einmal zu ändern, nicht mehrere Male.

+1

Nur eine Anmerkung: 'int integerValue = integerList.get (i);' ist anfällig für eine 'NullPointerException'. – Tom

+0

@Tom Vielen Dank, aktualisiert. –

+0

@Tom Wie könnte es für die NPE anfällig sein? Wäre der Zustand der Schleife nicht erfüllt und würde sie nicht eintreten? –

3

Wie andere bereits erwähnten, ist es etwas effizienter, das Objekt einmal zu bekommen. Natürlich wird das meistens keine Probleme verursachen und Sie können keine Unterschiede bemerken.
Logisch, weil es eine O(1) Operation ist, sollte es überhaupt keine Unterschiede verursachen, aber weil es eine Funktion eines Objekts vom Typ ArrayList aufruft, ist es weniger Cache freundlich und direkte Speicherreferenz vielleicht benötigt. Dennoch ist der Unterschied sehr gering.

Verwandte Themen