Ist das eine schlechte Praxis?Stacking Generika
Antwort
Dies ist nicht unbedingt eine schlechte Praxis. Es ist einfach "unlesbar". Haben Sie ein wenig Geduld, in der kommenden Java 7 Sie erlaubt sind die cruft in bestimmten generischen Typen wegzulassen, wenn die parametrisierte Art der Konstruktion:
List<List<List<Double>>> list = new ArrayList<>();
Dies wird type inference genannt.
Ab jetzt, wenn Sie mit Compiler-Warnungen leben können, können Sie auch einfach einmal so:
List<List<List<Double>>> list = new ArrayList();
Ich denke, Sie könnten auch eine Factory-Methode erstellen, die etwa so aussieht wie public static
oder verwenden Sie einfach Guavas 'Lists'-Klasse und ersetzte den Konstruktoraufruf durch' Lists.newArrayList() '. Das macht genau das, was Mike vorgeschlagen hat. – whiskeysierra
Nun, brauchen Sie eine Liste, deren Elemente Listen sind, deren Elemente Listen sind? Wir haben keine Ahnung, was Sie erreichen wollen, wenn Sie es uns nicht sagen.
Allerdings ist die Verwendung von ArrayList
direkt statt List
in der Tat eine schlechte Praxis.
Sie haben absolut Recht, danke. Keine Ahnung, warum ich List nicht gemacht habe. – rhombidodecahedron
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 hätte es Operationen wie TwoDimensionalList.get(int i, int j)
, um ein Element in der j
th-Position der i
th Liste zu bekommen.
edit: wenn es keine Liste zweidimensionaler Listen ist, sondern eine dreidimensionale Liste, dann wollen Sie natürlich eine ThreeDimensionalList
. (Und wenn die Abmessungen 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).
Es ist eine dreidimensionale Matrix basierend auf ArrayList. Sieht nicht gut aus, aber so müssen wir es schreiben.
könnte eine Alternative sein:
List<List<List<Double>>> list = new ArrayList<List<List<Double>>>();
, die wie in den meisten Fällen Ihr nur Interesse an den Interface-Methoden etwas kürzer und in der Regel in Ordnung ist.
Wenn Sie also eine resizable dreidimensionale Matrix-Datenstruktur 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 möchten. Ich würde eine Klasse erstellen, die eine private ArrayList<...>
verwendet (Beglaubigung über Vererbung bevorzugen) und erforderliche Methoden erstellen. Wenn überhaupt, sollte es das Lesen und Verstehen erleichtern.
Zumindest würde es ausdrücklicher nennen, etwas wie 3dList, würde helfen. Bevorzugt ist für mich, eine benutzerdefinierte Kapselung von 2D/3D-Liste zu schreiben, wie andere oben vorgeschlagen haben.
Netter Vorschlag, aber in Java können Bezeichner nicht mit einer Nummer beginnen. Erfinde etwas besseres;) – BalusC
ThreeDimensionalList? ThreeDList? – whiskeysierra
ja. wahrscheinlich ist Ihr Code besser dran mit double[][][]
Dies ist wahrscheinlich eine bessere Wahl, wenn Sie ein dreidimensionales Array von Doubles verwenden, da eine ArrayList von ArrayLists von ArrayLists von Double-Objekten wahrscheinlich viel mehr Platz einnimmt, wenn es kein Sparse-Array ist. –
Im Allgemeinen sind Sie richtig. Java-Programmierer unterschätzen routinemäßig den Speicheraufwand, den Objekte einführen. Wenn Sie jedoch benötigen, dass Ihre Matrix im laufenden Betrieb skalierbar ist und Sie im Voraus wissen, dass die Größenvarianz schwer vorherzusagen ist, dann müssen Sie möglicherweise den Ansatz "Stack o 'Generics" verwenden. Zumal Arrays im Gegensatz zu C nicht dynamisch in Java skaliert werden können. – rtperson
- 1. Susy Columns - Stacking Mobile
- 2. Stacking Notifications funktioniert nicht
- 3. box stacking problem
- 4. td stacking ohne css
- 5. Bootstrap Prioritie Vertical Stacking
- 6. Ionic Android Benachrichtigungen Stacking
- 7. Stacking Monade Transformatoren in scala
- 8. Stacking Controls (Winforms C#) (Transparent)
- 9. Pseudo-Code für Shelf-Stacking
- 10. Was sind einige gängige Fokus-Stacking-Algorithmen?
- 11. Stacking Aktionen im Play Framework 2.0
- 12. Stacking in Pandas Datenrahmen basierend auf Spaltennamen
- 13. Stopp Bootstrap Navbar Hamburger Stacking mit Branding
- 14. Highcharts Toggle Stacking für Multi-Achsen-Diagramm
- 15. Stacking Divs Seite an Seite in CSS
- 16. Kotlin Generika
- 17. C# Generika - Array?
- 18. Sonderbare Verwendung von Generika
- 19. C# Generika und Sammlung
- 20. Kann nicht mit Generika
- 21. Generika-Wrapper-Klasse
- 22. Restricted Generika mit CDI
- 23. C# Generika Kopierkonstruktor
- 24. Kotlin-Generika in KFunktion1
- 25. C# Generika Missbrauch?
- 26. Typprüfung und Generika
- 27. Ungültige Guss Ausnahme Generika
- 28. Wechsel zu Generika.
- 29. Run ServiceOperation mit Generika?
- 30. Verwenden Generika ohne Sammlungen
Es macht meinen Kopf verletzt, aber soweit ich weiß, ist es akzeptabel. –
Wie definieren Sie schlechte Übung, in Ihrem Beispiel? –
Es ist offensichtlich für das Auge, dass es eine schlechte Praxis ist. –