8

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

4

4 回答 4

7

Swing 最早出现在 Java 1.2 之前,所以之前ArrayList是可用的。不幸的是,APIDefaultTableModel 暴露了它使用 的事实Vector,因此现在更改它将是向后不兼容的。

这正是仔细考虑封装的原因——它可以让您稍后更改内部结构。(诚​​然,正确地进行连载会很有趣,但这是另一天的故事......)

于 2011-04-28T13:03:26.250 回答
5

Swing 可用于 Java 1.1,但不包含在 Java 1.1 中。List/ArrayList在 1.2 中引入。可惜,因为在锁定 API 之前,Swing 本来可以多花一点时间。

于 2011-04-28T13:02:21.543 回答
2

原因上面已经解释过了(Swing 在 java.util Collections 库之前就已经存在)。

底线是:永远不要使用DefaultTableModel,而是构建自己的(基于AbstractTableModel)。

于 2011-04-28T13:24:04.310 回答
1

我猜测DefaultTableModel该类实际上是在 Java 中引入Collections Framework(包括ArrayList该类)之前开发的——因此,DefaultTableModel该类不是使用作为 Collections Framework 的一部分引入的类来实现的。

以下是一些事实:

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

于 2011-04-28T13:04:31.220 回答