ArrayList<Object[]> und toArray()

Status
Nicht offen für weitere Antworten.

mad-boy

Mitglied
Hallo,

ich stehe gerade vor dem Problem, dass ich, wenn ich eine ArrayList erzeuge, in der jeweils in Object-Array der Länge 3 gespeichert wird, und ich dann die toArray()-Funktion aufrufe, ein eindimensionales Object-Array zurück bekomme, anstatt ein zweidimensionales.

toArray() müsste doch eigentlich Object[][] zurückgeben, wenn die ArrayList ArrayList<Object[]> lautet, oder? Denn ich habe ja in jedem Element bereits ein Array!?

Liebe Grüße,
Michael
 
S

SlaterB

Gast
du erhälst ein Object[], in welchem jedes einzelne Object wiederum ein Object[] ist,
aber du erst casten musst

genauso wie aus einer ArrayList<String> ein Object[] herauskommt, in welchem die Objekte Strings sind,

falls du die höhere generische Methode verwendest, dann kompiliert:

ArrayList<Object[]> a = ..;
Object[][] x = a.toArray(new Object[0][]);
 

mad-boy

Mitglied
Alles klar, danke! Aber zum Verständnis: Wozu die 0 bei new Object[0][] ? Was gibt die an? Die erste Dimension, also die mit der 0, soll ja die einzelnen ArrayList Elemente enthalten?
 
S

SlaterB

Gast
du musst ein Objekt an to Array übergeben, new Object[][] kann man syntaktisch nicht schreiben, ein Array der Länge 0 ist das kleinste, größer wäre unnötig,

bis auf eine Ausnahme:
noch intelligenter wäre es, gleich ein Array der richtigen Größe zu übergeben:
new Object[a.size()][]

ansonsten erstellt sich toArray() intern ein neues Array des angegeben Typs passender Größe
 

mad-boy

Mitglied
Alles klar, dann wäre also in meinem Falle new Object[a.size()][3] das beste, da jedes Object-Array genau 3 Elemente hat!?

Super, vielen Danke für die schnelle Hilfe!

Liebe Grüße,
Michael
 
S

SlaterB

Gast
der zweite Index ist schlecht,
mit
new Object[a.size()][3] bei a.size() gleich 300
legst du ein ein Array der Länge 300 an und in jedes Element ein neu erzeugtes Object[3]

danach werden in dieses 300er-Array aber die 300 Elemente aus der Liste geschrieben,
die 300 neuen Object[3] sind ganz umsonst erzeugt worden

daher:
new Object[a.size()][], legt ein 300er Array an mit Inhalt 300x null,
wird dann von toArray() gefüllt
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben