8

すべてのテーブル モデルの更新操作に AWT スレッドを使用する必要があることはわかっています。単一の AWT スレッドでは、すべてのテーブル モデルがスレッド セーフになります。DefaultTableModel がデータ構造としてスレッドセーフな Vector を選択するのはなぜですか? これは ArrayList のような他のデータ構造よりも遅いのですか?

4

4 に答える 4

7

SwingはJava1.2より前に最初に登場したため、以前ArrayListは利用可能でした。残念ながら、のAPIは、を使用しているという事実をDefaultTableModel 公開Vectorしているため、今すぐ変更すると、下位互換性がなくなります。

これはまさに、カプセル化について慎重に考える理由の一種です。後で内部を変更することができます。(確かに、シリアル化を正しく行うことは興味深いことでしたが、それは別の日の話です...)

于 2011-04-28T13:03:26.250 に答える
5

SwingはJava1.1で利用可能でしたが、Java1.1には含まれていませんでした。List/ArrayListは1.2で導入されました。残念ながら、SwingはAPIをロックダウンする前に少し余分な時間を費やしていた可能性があります。

于 2011-04-28T13:02:21.543 に答える
2

その理由はすでに説明済みです (Swing は java.util Collections ライブラリの前に存在していました)。

肝心なのは、決して使用DefaultTableModelせずに独自のものを作成することです (に基づいてAbstractTableModel)。

于 2011-04-28T13:24:04.310 に答える
1

このクラスは、Collections Framework(クラスを含む)がJavaで導入さDefaultTableModelれる前に実際に開発されたと推測します。したがって、このクラスは、CollectionsFrameworkの一部として導入されたクラスを使用して実装されていません。ArrayListDefaultTableModel

ここにいくつかの事実があります:

さらに、インターフェース自体はの使用法に依存しないため、クラスVectorによる基礎となるデータ構造としてのaの使用は実装の詳細です。DefaultTableModelTableModelVector

于 2011-04-28T13:04:31.220 に答える