Java Arrayinitialisierung zeitlicher Aufwand Vorinitialisierte Arrays

abraxus14

Cadet 4th Year
Registriert
Mai 2007
Beiträge
102
Hallo,

ich wollte mal fragen, ob der zeitliche Aufwand für den Rechner bezülich einer Arrayinitialisierung bei den beiden Vorschlägen gleich ist. Sind beide Voschläge gleich performant?
Voschlag 1 double[] test = new double[5];

Vorschlag 2 double[] test1 = { 1 , 1 , 1 , 1, 1 };

Beim ersten Vorschlag wird das gesamte Array mit 0 intialisiert und beim zweiten Vorschlag mit dem Wert 1.
Wird beim ersten Vorschlag auch eine Schleife durchlaufen oder wie sieht das da geanu aus?

Danke für eure Antworten.
 
Zuletzt bearbeitet:
Nein es wird nicht mit 0 initialisiert sondern nur ein Speicherbereich reserviert, genug um 5 Double Werte aufzunehmen. Was tatsächlich in diesem Moment in dem Speicherbereich steht ist unbekannt, daher wird der Wert mit null beschrieben, aber das bedeutet nicht das der Speicherbereich auch überschrieben wird.
Im 2. Vorschlag wird überall ein Double mit dem Wert 1 angelegt, d.h. der Speicher wird effektiv geschrieben (und natürlich vorher reserviert).

Aber spielt i.A. keine Rolle, ein Informatiker würde sagen Vorschlag 1 hat eine Laufzeit von O(1) und der zweite eine von O(n). Kannst ja mal nach O-Notation suchen falls es dich interessiert.

Edit: Mir fällt gerade ein, es gibt Programmiersprachen bei denen ein Array wirklich mit Nullen initialisiert wird in Vorschlag 1. Ich bin mir gar nicht mehr so sicher ob Java das nicht auch automatisch macht (in der aktuellen Version). Probier es doch mal aus und lass dir dann den Wert von test[0] ausgeben und schau was passiert.
 
ja hab ich gemacht. es kommt überall 0.0 raus. kamm man dann also sagen, dass beide Voschläge gleich performant sind? Oder gibt es da noch einen Haken ;) ?
 
Dann macht das in dem Fall in Java keinen Unterschied, aber i.A. wird ein Array nicht sofort initialisiert. Wenn du also mal mit C oder C++ arbeitest solltest du es immer selber mit Werten belegen, auch wenn es nur Nullen sind.
 
Ein stupider Test mit 1 Milliarde Schleifendurchläufen hat ergeben, dass Variante 2 50% länger braucht.

Was da aber durch Optimierung etc. verfälscht wird, lässt sich schwer sagen, aber ich denke es ist zumindest ein Hinweis.

(Getestet mit Java 1.7)
 
DonaldKnuth schrieb:
"Programmers waste enormous amounts of time thinking about, or worrying about, the speed of noncritical parts of their programs, and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered. We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%.
.
 
Zurück
Oben