[TableModel] Doppelte einträge finden (bzw. verhindern)

Status
Nicht offen für weitere Antworten.

finupsen

Mitglied
Hallo,

Ich wollte mal wissen, wie man es am besten macht, wenn man doppelte einträge in einem Vector-Vector (TableModel)
verhindern will. Mein erster gedanke war pro "addRow" eine iteration auf den gesamten vector zu machen und im fall
einer übereinstimmung das "addRow" zu verwerfen. Ich vermute aber das könnte sehr performance-kritsch werden,
insbesondere dann, wenn das TableModel bereits 50000 einträge oder mehr hat.

Wie sind eure erfahrungen damit (bzgl. performance) und gibt es für sowas spezielle lösungen ?

vielen dank schonmal im vorraus
Andy
 

Wildcard

Top Contributor
Wie währ's statt mit Vectoren mit Hashtable oder Hashmap. Da können gar keine doppelten rein. :D
 
B

Beni

Gast
Dein Vorschlag wäre ein O( n^2 )-Algorithmus (das Positive: man kann noch schlimmere Algorithmen schreiben :wink:)

Eine Variante: die Einträge in der Tabelle sortieren, und dann suchen. Sortieren kann man in O( n log n ) (siehe Collections.sort..., bzw. Arrays.sort), und in einem sortierten Array nach doppelten Vorkommen suchen geht in O( n ) (weil doppelte Einträge immer Nachbarn sein müssen).

Andere Variante: Wenn du zusätzlich zu einer Tabelle eine HashMap/Table/Irgendwas (Hauptsache HASH) machst, kannst du in O(1) überprüfen, ob ein Element schon in der Tabelle ist (allerdings: zusätzliche Datenstruktur. Bei 50000 muss man sich langsam Gedanken über den Platz machen?).

Der erste Vorschlag ist gut, wenn du erst in der gefüllten Tabelle suchen musst, der zweite wenn du beim Einfügen prüfen willst.
 

finupsen

Mitglied
hallo,

> Eine Variante: die Einträge in der Tabelle sortieren, und dann suchen.

Ja, das mache ich bereits um der tabelle eine sort-funktion zugeben. also: Collections.sort(vector, comparator);
Bei ca. 50000 einträgen dauert das sortieren etwa 500mS was auch akzeptabel ist. Wenn ich aber jedesmal
ein sort pro addRow() starte, wäre das auch nicht sonderlich gut.
Dazu muss ich noch anmerken, daß die addrows alle auf einen schlag kommen. Ist also keine user-aktion sondern
ein laufender thread der die daten in den vector schiebt.

> Andere Variante: Wenn du zusätzlich zu einer Tabelle eine HashMap/Table/Irgendwas (Hauptsache HASH) machst,

Also parralel zu meinem model noch ein hashmap... das klingt garnicht schlecht. Was den platz betrifft: da müsste ich
wohl schleunigst dafür sorgen, daß wenn kein addrow mehr zu erwarten ist, dieses hashmap vom heap verschwinden
zulassen, oder ?

Eine andere sache die mir grade noch eingefallen ist, ist zusätzlich die einträge noch in eine mysql-db zuschreiben
wärend ein bestimmtes feld als UNIQUE deklariert wurde. Kommt eine duplicate-exception zurück wird addrow
verworfen. BTW. ich verwende in der applikation ohnehin mysql.

aber ich glaube da ist wohl ein hashmap deutlich schneller unterwegs , oder ?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Tablemodel und mysql Allgemeine Java-Themen 8
X Objekte aus TableModel serialisieren und deserialisieren Allgemeine Java-Themen 4
Z TableModel Allgemeine Java-Themen 16
A ResultSet TableModel aktualisieren? Allgemeine Java-Themen 9
D jTable und TableModel Allgemeine Java-Themen 2
MQue Frage zu TableModel Allgemeine Java-Themen 6
S TableModel von AbstractTableM. oder DefaultTableM. ableiten? Allgemeine Java-Themen 4
O Parameterisierte TableModel bzw. TableColumn? Allgemeine Java-Themen 2
H TableModel mit JNI Allgemeine Java-Themen 3
M WSDL: Doppelte Typenames (Keine Verwendung möglich) Allgemeine Java-Themen 5
X Ermittlung eines doppelte Paars mit Streams Allgemeine Java-Themen 50
J In einem Set doppelte Elemente erzeugen Allgemeine Java-Themen 4
Sogomn Best Practice "Doppelte" Methoden Allgemeine Java-Themen 3
L Doppelte eintraege im Stringbuffer löschen Allgemeine Java-Themen 4
J Doppelte Buchstaben löschen - letztes Wort macht er nicht Allgemeine Java-Themen 2
A List<String> auf doppelte Einträge überprüfen Allgemeine Java-Themen 4
F Doppelte Datensätze zusammenführen Allgemeine Java-Themen 12
B Collections TreeSet/TreeMap, doppelte Einträge zulassen ? Allgemeine Java-Themen 11
Q "Doppelte" Einträge einer Liste entfernen Allgemeine Java-Themen 14
S Doppelte Werte in Listen,Vectoren etc suchen Allgemeine Java-Themen 2
R Vererbung - doppelte Paint-Methode Allgemeine Java-Themen 4
A ArrayListe :Doppelte entfernen -> keine Referenzen Allgemeine Java-Themen 26
D Geht es auch schneller doppelte Einträge zu löschen? Allgemeine Java-Themen 23
m@nu doppelte daten im speicher? Allgemeine Java-Themen 2
T INI - Einträge auslesen Allgemeine Java-Themen 6
L Dependency Injection für Baum-Einträge Allgemeine Java-Themen 9
B Suche passende Datenstruktur für 2 Einträge Allgemeine Java-Themen 19
K JFreeChart - Einträge in DomainAxis anpassen Allgemeine Java-Themen 2
N Input/Output Verhindern, dass log-Einträge auf Console erscheinen Allgemeine Java-Themen 2
D Startmenü Einträge erstellen Allgemeine Java-Themen 4
M Auf Einträge im Buffer warten Allgemeine Java-Themen 7
V Java-Objekt. wie groß maximal ? anzahl der einträge Allgemeine Java-Themen 4
G List- Einträge löschen Allgemeine Java-Themen 3
F Einzelne Einträge im Array als konstant festlegen Allgemeine Java-Themen 2
T Kontextmenü Einträge Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben