ich ermittle mir zur Laufzeit verschiedene Variablen zu einem "Datensatz". Dies alles möchte ich erstmal wegspeichern und am besten danach noch sortieren (mittels Comparator vielleicht?!), um dann bspw. auf die ersten 3 sortierten Einträge zurückzugreifen und damit zu arbeiten.
Die Speicherung sollte zeilenweise (1Zeile = 1Datensatz) erfolgen, also etwa so:
A var1 var2 var3 var4 var5
A ist hierbei ein String und die var´s double-Werte.
Nun steh ich vor der Entscheidung, welche Methode ich am Besten anwenden soll, um:
1. relativ unkompliziert eine Sortierung der gespeicherten Daten vorzunehmen
2. einfach und schnell auf die Datensätze wieder zurückzugreifen und auszulesen.
Ist hierfür eine ArrayList eine gute Lösung, oder besser mit HashMap??? ...wobei, HashMap kann doch nur 2 Werte (Key,Value) pro Zeile speichern, oder?
bei einer hashmap hast du den vorteil das die suche nach dem Inhalt wesentlich einfacher und schneller als beim array geht, außerdem musst du bei dem array die länge von vorn herein festlegen wärend die hashmap flexibel in größe und länge ist.
wie es mit der sortierung aussieht weiss ich nicht genau, kann mir aber nicht vorstellen das es da große unterschieden gibt.. ich würde dir die hashmap empfehlen.
Was meinst du mit "einfach und schnell auf die Datensätze wieder zurückzugreifen und auszulesen"? Wie willst du auf die Datensätze zugreifen? Anhand ihrer Position der Sortierreihenfolge? Oder anhand der Inhalte( "Gibt mir den Datensatz, bei dem A den Wert 'xyz' hat")?
Wie willst du auf die Datensätze zugreifen? Anhand ihrer Position der Sortierreihenfolge? Oder anhand der Inhalte( "Gibt mir den Datensatz, bei dem A den Wert 'xyz' hat")?
Ich hab mir überlegt, dass ich vielleicht einmal anhand der Position nach der Sortierung auf die Datensätze zugreifen will und als weitere Option evtl. auch noch anhand der Inhalte.
Also wäre wohl eine ArrayList schon besser?!?
In eine HashMap kann ich doch eh bloß 2 Einträge pro Zeile speichern, oder - das dachte ich zumindest?!
Eigentlich Objekt (=einen Datensatz) und einen sog. Key (also eine Art Namen, mit dem man das Objekt später wiederfindet.
Aber auch in einer ArrayList solltest du deine Datensätze objektweise sepichern (und nicht etwas "flachgeklopft" erst den String des ersten Satzes, dann die 5 doubles des ersten Satzen, dann den String des zweiten Satzes usw.).
Für den Datensatz definierst du eine eigene Klasse und dann nimmst du eine (parametrisierte) ArrayList:
Wenn ich das richtig verstehe, sollen nur die parameter der einzelnen Einträge sortiert werden, deshalb ja eine HashMap, in der mit den Namen (z.B. A) die einzelnen Parameter in einem sortierten Array abgelegt sind. Hab ich da was falsch verstanden?
Wenn ich das richtig verstehe, sollen nur die parameter der einzelnen Einträge sortiert werden, deshalb ja eine HashMap, in der mit den Namen (z.B. A) die einzelnen Parameter in einem sortierten Array abgelegt sind. Hab ich da was falsch verstanden?
Ich hab da jetzt mal was probiert - so siehts bisher bei mir aus (Auszug der relevanten Stelle):
Code:
String a;
double var1=0;
double var2=0;
double var3=0;
double var4=0;
double var5=0;
ArrayList liste = new ArrayList();
//Tabelle durchgehen und Werte auslesen und abspeichern
for(int i=0;i<rows.getarraysize();i++) {
row = rows.get(i);
for(int j=0;j<columns.getarraysize();j++) {
column = columns.get(j);
//hier die einzelnen Variablen belegen, z.B. (das klappt bereits!!!)
a=value.GetCell(column,row);
var1=value.GetCell(column,row);
//usw.
}
liste.add(i, a + "," + var1 + "," + var2); //usw.
}
So war jetzt erstmal mein Gedanke, dass ich mir zeilenweise, wie ich die Werte auslese, diese auch gleich zeilenweise in die ArrayList schreibe.
Ich muss allerdings die Werte mit einem "," trennen, sonst gibts nen Fehler. Lieber wäre mir, wenn ich die Werte neben einem Index i auch noch einen Index j hätten, der von links nach rechts in der ArrayList läuft! Somit könnte ich einzelne Werte später doch wieder viel einfacher auslesen, statt den Kommaseparator als Trennzeichen zu benutzen. Gibts da vielleicht ne Möglichkeit?
Ist mein Gedanke aber erstmal halbwegs richtig?
Wie gesagt: bau dir für den Datensatz eine eigene Klasse, dann kannst du jederzeit auf die einzelnen Felder zugreifen, ohne irgendwelche Strings zerhacken zu müssen.
Ah, natürlich... Recht ihr habt!
Ich habe beim abtippen etwas vergessen...
Code:
String a;
double var1=0;
double var2=0;
double var3=0;
double var4=0;
double var5=0;
ArrayList liste = new ArrayList();
//Tabelle durchgehen und Werte auslesen und abspeichern
for(int i=0;i<rows.getarraysize();i++) {
row = rows.get(i);
for(int j=0;j<columns.getarraysize();j++) {
column = columns.get(j);
String colInstanceName = column.GetSymbol();
//hier die einzelnen Variablen belegen, z.B. (das klappt bereits!!!)
if(colInstanceName.equalsIgnoreCase("Spalte1")){
ParamValue value = value.GetCell(column, row);
a=value.GetCell(column,row);
}
//wenn Spaltenüberschrift gleich <String>: Wert aus Tabelle auslesen
else if(colInstanceName.equalsIgnoreCase("Spalte2")){
ParamValue value = value.GetCell(column, row);
var1=value.GetCell(column,row);
}
//usw.
}
liste.add(i, a + "," + var1 + "," + var2); //usw.
}
Mh, das lag daran, dass ich das ganze etwas Foren- bzw. Leserfreundlich gestalten wollte.
Auf jeden Fall erhalte ich definitiv die korrekten Werte für die einzelnen Variablen!
Naja, ok... Also besser die Datensätze in eine eigene Klasse rein? Mh, wüßte ich jetzt erstmal so pauschal nicht, wie ich da vorgehe, aber egal - das wird schon. :###