すべてのテーブル モデルの更新操作に AWT スレッドを使用する必要があることはわかっています。単一の AWT スレッドでは、すべてのテーブル モデルがスレッド セーフになります。DefaultTableModel がデータ構造としてスレッドセーフな Vector を選択するのはなぜですか? これは ArrayList のような他のデータ構造よりも遅いのですか?
4 に答える
SwingはJava1.2より前に最初に登場したため、以前ArrayList
は利用可能でした。残念ながら、のAPIは、を使用しているという事実をDefaultTableModel
公開Vector
しているため、今すぐ変更すると、下位互換性がなくなります。
これはまさに、カプセル化について慎重に考える理由の一種です。後で内部を変更することができます。(確かに、シリアル化を正しく行うことは興味深いことでしたが、それは別の日の話です...)
SwingはJava1.1で利用可能でしたが、Java1.1には含まれていませんでした。List
/ArrayList
は1.2で導入されました。残念ながら、SwingはAPIをロックダウンする前に少し余分な時間を費やしていた可能性があります。
その理由はすでに説明済みです (Swing は java.util Collections ライブラリの前に存在していました)。
肝心なのは、決して使用DefaultTableModel
せずに独自のものを作成することです (に基づいてAbstractTableModel
)。
このクラスは、Collections Framework(クラスを含む)がJavaで導入さDefaultTableModel
れる前に実際に開発されたと推測します。したがって、このクラスは、CollectionsFrameworkの一部として導入されたクラスを使用して実装されていません。ArrayList
DefaultTableModel
ここにいくつかの事実があります:
DefaultTableModel
Java1.2で導入されましたArrayList
Java1.2で導入されましたVector
JDK1.0で導入されました
さらに、インターフェース自体はの使用法に依存しないため、クラスVector
による基礎となるデータ構造としてのaの使用は実装の詳細です。DefaultTableModel
TableModel
Vector