In Dov Java-Leistungen Bulka und Skalierbarkeit: Volume 1 erwähnt der Autor, dass wegen der mit etwas wieJava Arraylist for-Schleife Optimierung
for (int i = 0; i < vector.size(); i++) {
// do something that does not modify vector size...
}
ist eigentlich eine kleine Optimierung Ausgabe über ein ArrayList
looping somit konstante Berechnung von vector.size()
, was impliziert, dass etwas wie
int size = vector.size();
for (int i = 0; i < size; i++) {
// do something that does not modify vector size...
}
tatsächlich etwas effizienter ist. Als das Buch im Jahr 2000 geschrieben wurde, verwendete der Autor das Sun 1.2.2 JDK.
Hat noch diese Bedingung für neue JDKs halten? Oder ist die Java-Kompilierung jetzt intelligent genug, um diese Ineffizienzen zu beseitigen, trotz ihrer geringen Größe?
EDIT: Ich mach dir keine Sorgen über diese kleinen Optimierungen in meinem Code; Ich war einfach neugierig auf die Entwicklung des JDK.
Wenn Sie nicht beweisen können, dass das wiederholte Aufrufen von 'size()' einen Engpass in Ihrem Code darstellt, verschwenden Sie keine Zeit mit solchen Mikrooptimierungen. In jedem Fall ist diese Optimierung nur unter bestimmten Bedingungen sicher (d. H. Dass kein anderer Thread die Größe von "Vektor" ändern kann, während Sie sich in der Schleife befinden). –
Verwenden Sie eine 'for-each'-Schleife und sorgen Sie sich nicht um die Interna der' List <> '. In java 8 'List # forEach (...)' wird es noch mehr verstecken. – bradimus
Die Grundregel von "mache nichts in einer Schleife, außer du musst es unbedingt in der Schleife machen" gilt immer noch. Ganz gleich, wie sich die Technologie entwickelt, es ist eine gute Sache, weniger Berechnungen in einer Schleife durchzuführen. –