T
Tobias Köhler
Guten Morgen
Habe ein Programm geschrieben, dass eine Exceltabelle einliest und diese Werte in einer SWT-Table anzeigt. Über Suchen öffnet sich die Suchtable und auf Tastendruck wird in der Spalte nach diesen Einträgen gesucht.
Zu Beginn der Suche wird erst festgestellt in welcher Spalte geschrieben wurde. Dann werden die ersten Zeichen jeder Zelle dieser Spalte verglichen und neu ausgegeben. Bedeutet die tabelle wird bei jeder neuen Tasteneingabe neu gezeichnet. Soviel zum Programm
Die Daten werden in ArrayLists gespeichert. Pro Zeile wird eine neue ArrayList erzeugt mit den Daten einer Zeile.
Danach werden diese ArrayLists in eine "große" ArrayList tabelle gespeichert. Ich durchsuche also per for-Schleifen:
Lange Rede, kurzer Sinn: Wie kann ich das schneller machen Bisher habe ich nur 10000 Daten und er braucht schon 7 Sekunden. Das Programm, das dieses hier ersetzen soll, sucht allerdings wahnsinnig schnell. Tausende an Zeilen per Tastendruck. Wie ist das möglich?^^ Ich weiß, dass meine Variante sehr performancelastig ist durch die neuen ArrayLists, Strings etc. Aber wie macht man es besser?
Danke für eure Geduld und Hilfe

Habe ein Programm geschrieben, dass eine Exceltabelle einliest und diese Werte in einer SWT-Table anzeigt. Über Suchen öffnet sich die Suchtable und auf Tastendruck wird in der Spalte nach diesen Einträgen gesucht.
Zu Beginn der Suche wird erst festgestellt in welcher Spalte geschrieben wurde. Dann werden die ersten Zeichen jeder Zelle dieser Spalte verglichen und neu ausgegeben. Bedeutet die tabelle wird bei jeder neuen Tasteneingabe neu gezeichnet. Soviel zum Programm

Die Daten werden in ArrayLists gespeichert. Pro Zeile wird eine neue ArrayList erzeugt mit den Daten einer Zeile.
Danach werden diese ArrayLists in eine "große" ArrayList tabelle gespeichert. Ich durchsuche also per for-Schleifen:
Java:
String aktuell = tabelle.get(i).get(zelle).toLowerCase();
/**
* Nur suchen, wenn der Inhalt der Zelle nicht kürzer
* als das Suchwort ist. Andernfalls wird Exception ausgelöst
*/
if(aktuell.length()>=suchwort.length())
{
/**
* Durchsuche die aktuelle Zelle nach Übereinstimmungen
* zu durchsuchender Bereich ist begrenzt durch die Länge
* des Suchwortes.
* Somit ist möglich:
* Suchwort = "1" findet "1, 10" aber nicht "51, 61"
*/
if(aktuell.substring(0, suchwort.length()).indexOf(suchwort) != -1)
treffer = true;
}
else
treffer = false;
Lange Rede, kurzer Sinn: Wie kann ich das schneller machen Bisher habe ich nur 10000 Daten und er braucht schon 7 Sekunden. Das Programm, das dieses hier ersetzen soll, sucht allerdings wahnsinnig schnell. Tausende an Zeilen per Tastendruck. Wie ist das möglich?^^ Ich weiß, dass meine Variante sehr performancelastig ist durch die neuen ArrayLists, Strings etc. Aber wie macht man es besser?

Danke für eure Geduld und Hilfe
