ArrayList soll ArrayListen aufnehmen

J

Joerg66

Hallo,
ich muss Zeilenweise Dateien einlesen, die Zahlen-Buchstabenkombinationen beeinhalten. Pro Zeile habe ich höchstens 10 Kombinationen, aber ich weiss nicht, wie viele Zeilen.
x-100 y10
x-99 y9 z1 b20 c180 G1 F300
z2 G0
usw.
Anschliessend muss ich auf jede Kombination zugreifen können.
Ich wollte das so machen, das ich die Zeilen in ein ArrayList einlese und dabei die Spalten wiederum in ArrayListen aufsplitte, code:
Code:
private static ArrayList programm;
programm = new ArrayList();

public static void addText(String txt){
  ArrayList tt = new ArrayList();
  String pps[] = txt.split(" ");
  for (int i=0; i != pps.length; i++)
    tt.add(pps[i]);
  programm.add(tt+"\n");
}

Wenn ich jetzt auf das dritte Feld in der zweiten Zeile zugreifen will, bräuchte ich folgende Zeile:
programm.get(1).get(2)
was aber natürlich nicht geht :-(
Kann mir da jemand weiterhelfen
Danke im Voraus und Gruss Joerg66
 
Hallo,

warum machst Du das nicht so:

Code:
private Map spalte = new HashMap();
 
public void add(int spalte, int zeile, Object o) {
  Integer s = new Integer(spalte);
  Map z = (Map)spalte.get(s);
  if (z == null) {
	z = new HashMap();
	spalte.put(s, z);
  }
  z.put(new Integer(zeile), o);
}
 
public Object get(int spalte, int zeile) {
  Integer s = new Integer(spalte);
  Map z = (Map)spalte.get(s);
  if (z == null) {
	return null;
  }
  return z.get(new Integer(zeile));
}
Den Rest kannst Du ja, oder?
 
Hi,

Code:
((ArrayList)programm.get(1)).get(2)


sollte aber doch funktionieren, oder ?

Code:
 programm.add(tt+"\n")

was versuchst du hier ? Du fügst ein \n an eine ArrayList an ? :confused:

Gruss,

Krösi
 
...der Möglichkeiten gibt es viele. Kroesis Cast geht natürlich.

Man könnte genauso gut eine Map verwenden, dann würde sich z.B. der Schlüssel aus Spalte + Trennzeichen + Zeile ergeben.

P.S.: Wie man aus einer ArrayList einen String macht... :)
programm.add(tt+"\n")
 
Moin,
erstmal danke für die Antworten !!
Das mit der HashMap habe ich mal getestet, habe aber feststellen müssen, das die Flexibilität extrem zu lasten der Geschwindigkeit geht. Wenn nämlich die erste Bearbeitung der einzelnen Elemente abgeschlossen ist, muss das ganze Zeilenweise in ein SWT- Editor-Feld kopiert werden. Bei 2000 Zeilen (es sind auch manchmal 10mal mehr) dauert das dann schon 6sec, zu langsam.
Werde also wohl nur Zeilenweise in eine Map einlesen (soll ja schneller sein als ein Array)- und die Strings direkt vor der Bearbeitung splitten müssen.
Oder hat da noch jemand eine Idee ?
Das mit dem
Code:
programm.add(tt+"\n")
habe ich wegen dem Zeilenwechsel gemacht, den ich für den Editor brauche. Funktioniert auch !! Nicht gut ?

Gruss Joerg66
 
Du packst den ganzen String in die Map.

Code:
List list = Arrays.asList("was willst Du denn nun genau tun".split(" "));
System.out.println(list.size());
StringBuffer sb = new StringBuffer();
Iterator it = list.iterator();
while (it.hasNext()) {
  sb.append(it.next());
  sb.append('\n');
}
myTextField.setText(sb.substring(0, sb.length() - 1));

Das dürfte eigentlich sehr schnell sein.

Wenn's einfacher (und noch schneller) sein soll:

Code:
myTextField.setText("was willst Du denn nun genau tun".replace(' ', '\n'));

;)
 
Hallo Schnuffie,
hab mich jetzt doch für die HashMap -Version entschieden.
Ist halt das flexibelste, habe nur nicht daran gedacht, das nicht das speichern so langsam ist, sondern das zeilenweise- oder gar Wortweise- einlesen in das Textfeld.
HashMap's in den StringBuffer und dann alles in's Textfeld ist flink und flexibel.
Vielen dank für Deine Hilfe und sorry für das hin und her!
Aber wer nicht genau weiss, was er nicht weiss, der weiss auch nicht was er fragen soll . . .
Gruss Joerg66
 
Zurück