高效的TableModel实现

时间:2009-07-28 08:11:12

标签: java swing data-structures

我的TableModel实施通常位于ArrayList,以实现高效的随机访问性能。但是,ArrayList的{​​{1}}实现效果相当低,因为它涉及进行remove(int)调用以将所有后续元素移回1。

人们采用什么方法来实施System.arrayCopy(...)?我应该考虑更好的数据结构吗? ......也许是第三方图书馆?

更多信息:我的表数据可以缩小和增长,因此任何固定大小的缓冲区实现都无法正常工作。

提前致谢。

3 个答案:

答案 0 :(得分:2)

你的问题是“过早优化”。

在我的计算机上,System.arrayCopy()可以复制1 million elements of data in roughly 13ms。所以我建议衡量这是否真的是一个问题。在一般情况下,ArrayList比任何其他类似的数据结构更快,并且具有更好的内存性能。

使用LinkedList会使列表中的所有操作(包括remove())变慢,因为您现在必须遍历每个操作的所有列表元素的一半(平均)。所以大多数操作都是从O(1)到O(N / 2)。

答案 1 :(得分:1)

实现TableModel时,您需要考虑两件事

1)创建和操作模型

2)渲染你的表

第一个与第二个相比不那么重要。

您通常只创建一次模型并进行少量操作,表后面的渲染引擎会连续查询您的tablemodel。 这意味着从模型中检索信息必须是最优的,因此应避免以模型查询为代价加速模型操作的任何操作。

在我的情况下,我需要两个,重型操作和快速渲染。所以我做的选择是一种LinkedList实现,用于所有操作与数组结合,两者都保持同步,所有插入,操作删除都是通过链表结构完成的,所有渲染都使用数组结构

答案 2 :(得分:0)

如果您需要经常删除元素,可以选择链接列表实现。为快速删除支付一点内存。