为什么Java DefaultTableModel使用Vector?

时间:2011-04-28 12:59:14

标签: java swing jtable tablemodel

我知道我们必须使用AWT线程进行所有表模型更新操作。在单个AWT线程下,任何表模型都是线程安全的。为什么DefaultTableModel选择线程安全的Vector作为其数据结构,这比其他数据结构如ArrayList慢?

4 个答案:

答案 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。

以下是一些事实:

此外,Vector类使用DefaultTableModel作为基础数据结构是一个实现细节,因为TableModel接口本身不依赖于使用Vector