我知道我们必须使用AWT线程进行所有表模型更新操作。在单个AWT线程下,任何表模型都是线程安全的。为什么DefaultTableModel选择线程安全的Vector作为其数据结构,这比其他数据结构如ArrayList慢?
答案 0 :(得分:7)
Swing首先出现在Java 1.2之前,所以在ArrayList
可用之前。遗憾的是,DefaultTableModel
的API公开它使用Vector
这一事实,因此现在更改它会向后兼容。
这正是仔细考虑封装的原因 - 它可以让您稍后更改内部。 (不可否认,正确的序列化将是有趣的,但这是另一天的故事...)
答案 1 :(得分:5)
Swing可用于Java 1.1,但未包含在Java 1.1中。 1.2中引入了List
/ ArrayList
。可惜,因为在锁定API之前,Swing可能需要一些额外的时间。
答案 2 :(得分:2)
上面已经解释了原因(Swing存在于java.util Collections库之前)。
底线是:永远不要使用DefaultTableModel
,而是建立自己的(基于AbstractTableModel
)。
答案 3 :(得分:1)
我猜测DefaultTableModel
类实际上是在The Collections Framework(包括ArrayList
类)之前开发的,因此引入了DefaultTableModel
使用作为集合框架一部分引入的类没有实现class。
以下是一些事实:
DefaultTableModel
是在Java 1.2中引入的。ArrayList
是在Java 1.2中引入的。Vector
在JDK 1.0中引入此外,Vector
类使用DefaultTableModel
作为基础数据结构是一个实现细节,因为TableModel
接口本身不依赖于使用Vector
。