Java Array deklarieren und später stück für stück initialisieren?

CitroenDsVier

Lt. Commander
Registriert
Dez. 2013
Beiträge
1.896
Hallo zusammen,

wenn ich ein integer-Array erst deklarieren und später in eine for-Schleife mit Werten füllen möchte, wie kann ich das ohne Fehlermeldung machen?

wenn ich schreibe:
Code:
int[] test;
for(int i = 0; i < x; i++) {
    test[i] = sonstwas
}

bekomme ich die Meldung "the local variable test may not have been initialised" (ich benutze Eclipse).

Wie kann ich so etwas prinzipiell anstellen? Habe zur Zeit mehrere Stellen, wo ich eine solche Vorgehensweise brauche..

MfG, V40
 
CitroenDsVier schrieb:
Code:
int[] test;
for(int i = 0; i < x; i++) {
    test[i] = sonstwas
}

Nur zur Verdeutlichung: ohne Initialisierung des Arrays mit dem "new" Keyword würde dir der Compiler einfach nur einen leeren Bereich für die Variable "test" am Stack reservieren (idR 4 Bytes) welchem aber nie ein Wert zugewiesen wird. Erst wenn du mit new initialisierst wird das eigentliche Arrayobjekt im Heap angelegt und der Verweis dorthin in diesen vorher reservierten Bereich geschrieben.

Wie kann ich sowas dann anstellen, wenn ich die Länge vorher nicht kenne?

In dem Moment wo du ein normales Array initialisierst musst du auch wissen wie groß dieses sein soll. Wenn du ein dynamisches Array benötigst wo du nach belieben Objekte rein und rausschmeißen kannst müsstest du eine ArrayList o.Ä. verwenden https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html
 
ArrayList is perfekt dafür und es gibt passende Varianten für die meisten Anwendungsfälle :)
(Sortieren, spzielle Reihenfolge,...)

Lg
 
naja, du kannst ne bestimme länge nehmen, die reicht, speicherplatz sollte ja nicht das problem sein in der heutigen zeit..
sonst kannst drum herum arbeiten, oder verkettete listen oder bäume ..

oder wie assisi schreibt, arraylist
es gibt datenstrukturen für dich, die besser als normales array sind
 
Zuletzt bearbeitet:
Mr.Smith schrieb:
naja, du kannst ne bestimme länge nehmen, die reicht, speicherplatz sollte ja nicht das problem sein in der heutigen zeit..

Finde ich jetzt nicht so zweckmäßig. Falls er gerade nur 5 Elemente braucht, hat er aber schon vorsorglich Speicherausbau geteilt durch Pi mal Daumen Platz geschaffen. Wenn er ein dynamisches Array will, soll er ein dynamisches nehmen. Wurde zwar schon gesagt, wollte aber nochmal darauf hinweisen.
 
Die ArrayList wird aber intern auch nichts anderes machen.... Array anlegen und wenns nicht reicht ein neues größeres anlegen und die alten Werte kopieren. In C# kann man die Initialgrösse auch optional angeben.
 
Wie das intern genau gemacht wird, weiß ich leider nicht. Aber wenn sich nur 5 Elemente ergeben, ist es auch nur 5 groß. Wenn man die mögliche Maximalgröße kennt, kann man ja eins festlegen. Aber wenn nicht, einfach irgendeinen möglichst großen Wert nehmen halte ich für unklug. Wollte ich damit ausdrücken.
 
Zurück
Oben