我的TableModel实现通常位于ArrayList之上,以实现高效的随机访问性能。然而,ArrayList的remove(int)实现看起来相当低效,因为它需要进行一次System.arrayCopy(...)调用,将所有后续元素移回1。
人们采用什么方法来实现TableModel?有没有我应该考虑的更好的数据结构?也许是第三方库?
更多信息:我的表数据可能会缩小和增长,因此任何固定大小的缓冲区实现都不会起作用。
提前谢谢。
发布于 2009-07-28 08:26:46
你的问题充满了“过早优化”的味道。
在我的电脑上,System.arrayCopy()可以复制1 million elements of data in roughly 13ms。因此,我建议衡量这是否真的是一个问题。在一般情况下,ArrayList比任何其他类似的数据结构更快,并且具有更好的内存性能。
使用LinkedList会使列表上的所有操作(包括remove())变慢,因为对于每个操作(平均而言),您现在必须遍历所有列表元素的一半。因此,大多数操作将从O(1)变为O(N/2)。
发布于 2009-07-28 09:57:28
在实现TableModel时,您需要考虑两件事
1)创建和操作模型
2)渲染表
与第二个相比,前者在性能方面的重要性要小得多。
通常情况下,您只需创建模型一次,然后进行少量的操作,表后面的渲染引擎就会连续查询您的表模型。这意味着从模型中检索信息必须是最优的,因此要避免采取任何以模型查询为代价来加速模型操作的操作。
在我的例子中,我需要两者,繁重的操作和快速的渲染。所以我所做的选择是对所有操作结合一个数组的一种LinkedList实现,两者保持同步,所有插入、操作删除都是通过链表结构完成的,所有呈现都使用数组结构
发布于 2009-07-28 08:16:58
如果您需要频繁地删除元素,则可以选择LinkedList实现。您需要为快速删除而付出一点内存。
https://stackoverflow.com/questions/1192586
复制相似问题