ich hab mal wieder eine knifflige Sache. Ich möchte "einfach" nur ein 2 dimensionales Array erstellen, dessen Elemente HashMaps sind (aus String und Object).
Um das ganze mal eine Stufe weiter oben zu hinterfragen: Brauchst du Zugriff auf jede einzelne Map, oder ist das nur eine verkappte 3D-Datenstruktur? Erstelle dir ein Interface
Es sind Eigenschaften für 2D-Zellen, welche ich vorher dynamisch variiere. Zum Schluss muss ich aber trotzdem rausfinden, welche Zellen gemeinsame Eigenschaften habe. Deshalb benutze ich HashMaps, da diese sich mittels equals schön vergleichen lassen.
Mit interface habe ich leider noch keine Erfahrungen gemacht. Was für Vorteile bringt mir das?
Also dann das erste Interface - wobei es vermutlich nicht direkt in dieser Form passen würde. Die bisherige Beschreibung klingt ein bißchen nach einer ~"Structure of Arrays". Also, als würde es sowas geben wie
Java:
int cellValues[][]=...int cellSizes[][]=...Map cellProperties[][]=...
Aber das kann täuschen. Es gibt Fälle, wo (und sei es nur für einzelne Elemente einer solchen "Cell") ein zusätzlicher Array für eine bestimmte Eigenschaft der Zellen angebracht ist. Aber man sollte beide Optionen in Betracht gezogen haben. Etwas mehr Infos zum eigentlichen Ziel wären da nicht verkehrt, sonst ist das nur Spekulation.
Man kann Statt "HashMap" auch einfach das interface (!) "Map" verwenden. Sowas wie
gibt [c]true[/c] aus. So ist das "equals" für alle vernünftigen Implementierungen von Map eben definiert.
Der Vorteil von interfaces allgemein ist zu Grundlegend, als dass ich ihn nochmal auswalzen würde, das wichtiste hier: Man kann die Implementierung nachher ändern. Wenn man ein Interface hat wie
Das Interface selbst kann man implementieren, wie man will:
Java:
classSimpleDataStructureimplementsDataStructure{privateMap data[][]=newMap[1000][1000];// Wenn's sein muss...publicMapget(int x,int y){return data[x][y];}}
oder eben
Java:
classSparseDataStructureimplementsDataStructure{privateMap<IntPair,Map> data =newHashMap<IntPair,Map>()publicMapget(int x,int y){return data.get(IntPair.of(x, y);}}
und kann damit schwuppdiwupp und vollkommen transparent auch mal virtuell (d.h. wenn sie "dünn besetzt" ist, im Sinne einer Sparse Matrix) eine etwas größere DataStructure erstellen:
Java:
Map map = dataStructure.get(1223423,23423423);// Kein Problem...
Welche Eigenschaften haben die Zellen? Gibt es schon eine Cell-Klasse? Um wie viele Zellen geht es? Ist die Datenstruktur vielleicht "dünn besetzt"?
Im Moment habe ich "nur" ein 2d-Array, welches den reinen Text der Zellen beinhaltet, und eben parallel dazu die das 2d-Array mit den dazugehörigen Maps, welche am Anfang dieser basicMapStyle entsprechen. Anhand des Textes werden dann dynamisch die Eigenschaften "ausgelesen" und gesetzt. Wenn alles funktioniert ist es das kleinste Problem, beides in eine eigene Cell-Klasse zu verpacken.
Die Größe des 2d-Arrays kann leicht 100*500 erreichen.
ich denke, die ursprüngliche Frage ist beantwortet,
bevor zu diesem einfachen und immer noch vorderen Thema zu viele umsonst reinschauen, setze ich auf 'Erledigt'