Ich habe nix gegen double[], nur eben die Kombination eines List[] aus double[] lässt meine Zehnnägel nach oben biegen ala eine Map mit einer Map mit einer List etc
Zum ersten Posting: Der Fehler liegt darin, daß ArrayList<irgendwas> nur mit einer Klasse irgendwas geht, also nicht mit einem primitiven Datentyp wie double.
Was ginge, wäre ArrayList<Double[]>.
Das Problem ist nur, daß dann Autoboxing nicht funktioniert:
testdouble müßte auch vom Typ Double[] sein, dann geht es. Den einzelnen Elementen kannst Du dann aufgrund Autoboxing double Werte zuweisen, also so:
Java:
ArrayList<Double[]> ado =newArrayList<Double[]>();// legalDouble[] testdouble ={3.4,4.5};// das echte, gute objektive Double mit dem großen D
ado.add (testdouble);// funktioniert.
ArrayList<double[]> ado = new ArrayList<double[]> ();
geht genauso wie
ArrayList<Double[]> ado = new ArrayList<Double[]> ();
dann gibts auch kein // kreisch
double[]-Dinge sind nämlich richtige Objekte, double dagegen nicht
Hey, danke! Ich schau mal, wie ich das noch mit Maps kombinieren kann.
Im Ernst: Die Datenstruktur ist für den Anwendungszweck ziemlich sinnvoll. Es geht um Matrizenrechnung und der Code ist recht performant und auch lesbar (zumindest von mir). Und nachdem es offensichtlich viele verwundert, wie man auf diese Datenstruktur kommen kann, hier das zugehörige Anwendungsszenario:
Es gibt eine Menge Personen, die jeweils durch ein double-Array gekennzeichnet sind. Die Personen gehören zusätzlich auch verschiedenen Gruppen an, wobei nicht bekannt ist, wie viele Personen in einer Gruppe sind. bekannt ist allerdings vorweg bereits, wie viele verschiedene Gruppen es gibt. Die Personen (= double-Arrays) werden nun jeweils in die verschiedenen Gruppen aufgeteilt. Et violà, ein Array (-> feste Anzahl) aus ArrayLists (-> variable Anzahl), die jeweils double[]-Arrays enthalten:
Dort wird erklärt warum List<T>[] keinen Sinn macht und dementsprechend auch nicht geht (das ist keine Warnung sondern ein Fehler).
Man kann zwar auf anderem Wege Arrays von (generischen) Listen machen, aber wie schon angemerkt wurde ist davon eindeutig abzuraten.
In diesem Fall ist wirklich die Lösung List<List<T>> vorzuziehen.
Noch zum Thema autoboxing: Double <-> double, hier funktioniert autoboxing. Double[] <-> double[] hat mit autoboxing nichts zu tun. Selbst ein expliziter Cast funktioniert hier nicht. Was man machen kann, ist sowohl in ein double[] als auch in ein Double[] double und Double einzufügen (ohje was ein Satz ^^). Das ist dann wieder autoboxing. Alles was autoboxing macht, ist, statt Double d = new Double(4.0); Double d = 4.0; zu akzeptieren (implizit umzuwandeln). Daran sieht man auch, dass autoboxing bei Arrays keinen Sinn macht.