Ich weiß, dass wir den AWT-Thread für alle Aktualisierungsvorgänge des Tabellenmodells verwenden müssen. Unter dem einzelnen AWT-Thread ist jedes Tabellenmodell Thread-sicher. Warum wählt DefaultTableModel thread-sicheren Vektor als seine Datenstruktur, die langsamer als andere Datenstrukturen wie ArrayList ist?
Swing erschien zuerst vor Java 1.2, also bevor ArrayList
verfügbar war. Leider macht die API für DefaultTableModel
die Tatsache, dass Vector
verwendet wird, verfügbar, so dass es jetzt rückwärtskompatibel wäre.
Genau aus diesem Grund sollten Sie sorgfältig über Kapselung nachdenken - Sie können später die Interna ändern. (Zugegeben, Serialisierung richtig gewesen wäre interessant gewesen, aber das ist eine Geschichte für einen anderen Tag ...)
Swing war für Java 1.1 verfügbar, aber nicht darin enthalten. List
/ ArrayList
wurde in 1.2 eingeführt. Schade, denn Swing hätte etwas mehr Zeit gebraucht, bevor er die API gesperrt hat.
Der Grund wurde bereits oben erläutert (Swing existierte vor java.util Collections library).
Die untere Zeile lautet: Verwenden Sie niemals DefaultTableModel
, sondern erstellen Sie Ihre eigene (basierend auf AbstractTableModel
).
Ich gehe davon aus, dass die DefaultTableModel
The Collections Framework entwickelt (welches die ArrayList
Klasse) wurde in Java eingeführt - daher die DefaultTableModel
class wurde nicht mit den Klassen implementiert, die als Teil von The Collections Framework eingeführt wurden.
Hier ein paar Fakten:
DefaultTableModel
wurde in Java 1.2 eingeführt ArrayList
wurde in Java 1.2 eingeführt Vector
wurde in JDK 1.0 eingeführt Außerdem ist die Verwendung von Vector
als zugrunde liegende Datenstruktur durch die Klasse DefaultTableModel
ein Implementierungsdetail, wie das TableModel
-Schnittstelle selbst ist nicht auf die Verwendung von Vector
angewiesen.
Tags und Links java swing jtable tablemodel