Dies ist nicht unbedingt eine schlechte Übung. Es ist einfach "unlesbar". Haben Sie ein wenig Geduld, in der kommenden Java 7 dürfen Sie die Gruft in spezifischen generischen Typen weglassen, wenn Sie den parametrisierten Typ konstruieren:
%Vor%Dies wird Inferenz genannt.
Wenn Sie jetzt mit Compilerwarnungen leben können, können Sie dies auch tun:
%Vor%Es ist eine dreidimensionale Matrix basierend auf ArrayList. Sieht nicht gut aus, aber so müssen wir es schreiben.
Eine Alternative könnte sein:
%Vor%was etwas kürzer und normalerweise OK ist, da Sie in den meisten Fällen nur an den Interface-Methoden interessiert sind.
Wenn Sie also eine skalierbare dreidimensionale Matrixdatenstruktur benötigen, dann ist dies ein sauberer Ansatz.
Es wäre wahrscheinlich eine gute Idee, eine neue Klasse zu erstellen, um das Verhalten zu behandeln, das Sie erreichen wollen. Ich würde eine Klasse erstellen, die eine private ArrayList<...>
verwendet (Begünstigung der Delegierung über Vererbung) und erforderliche Methoden erstellen. Wenn überhaupt, sollte es das Lesen und Verstehen erleichtern.
ja. Höchstwahrscheinlich ist Ihr Code mit double[][][]
Hängt davon ab, wie Sie dies verwenden möchten. Vielleicht könnten Sie die zweidimensionale Liste einkapseln und mit einem List<TwoDimensionalList<Double>>
enden. Vermutlich würde es Operationen wie TwoDimensionalList.get(int i, int j)
haben, um ein Element in der j
th-Position der i
th-Liste zu erhalten.
edit: Wenn es sich nicht um eine Liste zweidimensionaler Listen handelt, sondern um eine dreidimensionale Liste, dann möchten Sie natürlich ein ThreeDimensionalList
. (Und wenn die Dimensionen Ihrer Liste festgelegt sind, können Sie dies intern mit einem einzelnen Array (Liste) implementieren, wobei sich das Element (i,j,k)
an der Position i*dim1 + j*dim2 + k*dim3
befindet).