Warum Java DefaultTableModel Vector verwenden?

8

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?

    
user729309 28.04.2011, 12:59
quelle

4 Antworten

7

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 ...)

    
Jon Skeet 28.04.2011 13:03
quelle
5

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.

    
Tom Hawtin - tackline 28.04.2011 13:02
quelle
2

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 ).

    
jfpoilpret 28.04.2011 13:24
quelle
1

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:

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.

    
coobird 28.04.2011 13:04
quelle

Tags und Links