Mehrdimensionale Liste?

Hardi82

Mitglied
Hallo Leute, heute habe ich folgende Lösungsaufgabe:

und zwar möchte ich mir ein erweiterbares zweidimensionales Array zusammenstellen. Die Ausgnagssituation ist so, dass ich einen Text mit mehreren Zeilen habe. Von diesen Zeilen sind einige speziell makiert, andere wieder nicht. Mit einem LineInputStream gehe ich nun Zeile für Zeile durch und überprüfe sie auf die Markierung. Jede Zeile möchte ich speichern und auf der Basis der Überprüfung mit einem Flag versehen, damit ich bspw. bei einer späteren Ausgabe als PDF die markierten Zeilen farblich von den anderen abheben kann. Nun benötige ich eine Liste/ ein Array, das in etwa so ausschaut:

c = Inhalt Zeile 1
m = Inhalt Zeile 2
c = Inhalt Zeile 3
c = Inhalt Zeile 4
m = Inhalt Zeile 5
c = Inhalt Zeile 6

Meine Überlegungen waren zum einen ein zweidimensionales Array<Char, String>, aber das ist schlecht dynamisch zu erweitern. HashTableXYZ ist auch ungeeignet, da zum einen gleiche Keys möglich sein sollen und diese auch automatisch sortiert werden. Hat jemadn einen Ansatz, wie ich dennoch meine Daten so speichern kann?

Gruß Hardie
 
Hallo,

hast du schon versucht an Stelle von Arrays Vectoren zu verwenden? ;)
Oder eben Vector mit Array...
 
Hm, daran habe ich auch schon gedacht, allerdings hab ich dann eine große Menge an String-Array in einem Vector. Das ist doch "ziemlich" Speicherintensiv, wenn man so viele Objekte erzeugt, oder nicht? Gibt es da keinen eleganteren Weg, ohne großartige Verschachtelungen und eine Menge an Objekten?
 
Ich weiß jetzt nicht, ob die Lösung so elegant ist, aber du könntest doch einfach eine HashMap nehmen. Die Zeilen sind der Schlüssel und als Wert setzt du deinen Marker. ;)
 
Erstell dir für die Zeile doch einfach nen eigenen Datentyp.

Nenn ihn beispielsweise Row.
Mit nem Boolean "marked".
und nem String "content".

die Die Dinger kannst du dann in einer ArrayList abspeichern
List<Row> meineListe = new ArrayList<Row>();
 
Die Idee hatte ich auch schon, aber bei vielen Zeilen wäre ich auch wieder bei vielen Objekten -> Speicher -> etc. Außerdem wollte ich einen extra Datentyp eigentlich vermeiden. Aber wahrscheinlich ist das die elegnateste Lösung und somit wird mir wohl nichts anderes übrigbleiben. Ich danke euch auf jedenfall für die Anregungen und Tipps.

LG
 
Hi,

HashMaps sind für so etwas geeignet, wie schon beschrieben.
Allerdings sind verschachtelte Listen zum Iterieren etwas praktischer (zumindest was die Codedarstellung angeht etc.).

Du musst Dir nur notieren, wo etwas ggf. stehen soll.

Code:
//2D, Iteration allgemein
for(List list2 : list1){//Zeile

    for(Object o : list2){//Inhalt
        //mache etwas mit o...
    }
}

Wenn dann an Stelle 1(nicht 0) Deiner list1 z.B. Fahrzeugcodes stehen,
ziehst Du dir diese Liste:

Code:
List codes = (List) list1.get(1);
  for(Object code : codes){
      //mache etwas mit code..., z.B. print... code.toString()
  }

Grüße Tim
 
Zurück