Datagrid mit dynamischen 2d array (arrayList)

JulianeJava

Mitglied
Hallo,

Ich hätte eine Frage bezüglich einer 2-dimensionalen Tabelle und ich hoffe jemand hat einen Rat für mich.

Im Grunde ist es ein dynamisches 2D array bzw. LISTE, welches mit Double Werten befüllt werden soll.
Ich weiß nicht ob es 7 oder 12 Spalten und ob es 300 oder 800 Zeilen werden. Keine fixen Grössen.

Es kommt immer ein String nach dem Musster: "12.00;34.65;45.12;100.00;4.12" daher der nach ";" gesplittet wird und die Zahlen in die nächste Zeile des DataGrids kommen. Jede Zahl kommt in eine Spalte rein.

...
12.00 34.65, 45.12 100.00
...

Was würde sich denn da anbieten um dieses Datagrid mit Werten zu füllen und dann auch bestimmte Werte rauszulesen und in Variablen abzuspeichern?


Ich würde mich am besten über ein Stückchen Code freuen, denn nur ein Hinweis ich solle ArrayList oder List mit ArrayList benutzen, bringt mich alleine nicht viel weiter 🙁

Danke
 
Meinst du sowas wie:
Java:
public static void main(String[] args) {
	String[] lines = new String[]{"12.00;34.65;45.12;100.00;4.12","123.5;54334.54"};
	List<List<Double>> dynArray = new ArrayList<List<Double>>();
	for (int i=0;i<lines.length;i++) {
		String s = lines[i];
		String[] values = s.split(";");
		List<Double> curLine = new ArrayList<Double>();
		for (int j=0;j<values.length;j++) {
			curLine.add(Double.valueOf(values[j]));
		}
		dynArray.add(curLine);
	}
	System.out.println("Degubausgabe: ");
	for (List<Double> line : dynArray) {
		for (Double d : line) {
			System.out.print(d+"\t");
		}
		System.out.println();
	}
}
?
Hauptsache ist aber, dass du den Code nicht kopierst, sondern verstehst.
 
Zuletzt bearbeitet:
List<List<T>> liste=

das war auch meine Vermutung und schien mir am sinnvollsten, nur die konkrete Umsetzung hatte ich nicht. Deine Lösung sieht mir auf den ersten Blick sehr kompakt und sehr gut aus :applaus:. Danke.

1) List<Double> curLine = new ArrayList<Double>();
da wird doch für jede neue Zeile/String neues Objekt erzeugt. Bei 1000 Zeilen wären das dann 1000 Objekte. Keine Performanceunterschiede ob ich jetzt die Objekte irgendwie für die Spalten (wären halt nur 10) oder Objekte für die Anzahl der Zeilen erstelle?

2) Stellt euch vor, es werden gleichzeitig 100 XML Dokumente geschickt und bei jedem soll nach einem bestimmten String geparst werden und dieser dann korrekt in das Datagrid/Tabelle abgespeichert werden. Nachdem alle String im DataGrid abgespeichert sind, sollte man dann auf den Wert in Zeile x und Spalte y zugreifen können. Alles in c# multithreaded 😀.
Ist das bis jetzt der richtige Ansatz oder würde es noch etwas Besseres geben? Vielleicht ein fertiges DataMatrixModel?

Java:
 for (Double d : line)
 System.out.print(d+"\t");
falls sich jemand fragt:
for(int i=0;i<line.size();i++){
System.out.println(line.get(i));
}

muss ich jetzt nur noch in c# umsetzen:shock:
 
1) List<Double> curLine = new ArrayList<Double>();
da wird doch für jede neue Zeile/String neues Objekt erzeugt. Bei 1000 Zeilen wären das dann 1000 Objekte. Keine Performanceunterschiede ob ich jetzt die Objekte irgendwie für die Spalten (wären halt nur 10) oder Objekte für die Anzahl der Zeilen erstelle?
Öhm, du erstellst keine 1000 Zeilen, sondern ein ArrayList, welches vorerst leer ist.
Wenn du die äußere ArrayList für Spalten benutzt wirst du ggf. Probleme bekommen. z.B.:
Code:
43  65  12  54
65  23            //diese Lücke kannst du nicht darstellen (schon, mit null, ist aber quatsch)
54  12  65  89

2) Stellt euch vor, es werden gleichzeitig 100 XML Dokumente geschickt und bei jedem soll nach einem bestimmten String geparst werden und dieser dann korrekt in das Datagrid/Tabelle abgespeichert werden.
Naja, sofern du richtig Threads reinimplementierst ist es ja egal ob 2 oder 200.

Ist das bis jetzt der richtige Ansatz oder würde es noch etwas Besseres geben? Vielleicht ein fertiges DataMatrixModel?
Bei solchen Aufgaben ist es, imho, immer besser ein angepasstes Model zu schreiben. Dann hat man weniger Sorgen.

muss ich jetzt nur noch in c# umsetzen
Dann wird es natürlich klar, warum du es in einem Java-Forum fragst... :bahnhof:
 
Die 1000 Zeilen bezogen sich auf 1000 mögliche Strings, bei Dir mit Beistrich getrennt sind. Und ich programmier schon hauptsächlich mit Java 🙂
läuft aber nun auch mit c# nach ein paar Anpassungen.
 

Zurück
Oben