首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高效的TableModel实现

高效的TableModel实现
EN

Stack Overflow用户
提问于 2009-07-28 08:11:12
回答 3查看 959关注 0票数 2

我的TableModel实现通常位于ArrayList之上,以实现高效的随机访问性能。然而,ArrayListremove(int)实现看起来相当低效,因为它需要进行一次System.arrayCopy(...)调用,将所有后续元素移回1。

人们采用什么方法来实现TableModel?有没有我应该考虑的更好的数据结构?也许是第三方库?

更多信息:我的表数据可能会缩小和增长,因此任何固定大小的缓冲区实现都不会起作用。

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-28 08:26:46

你的问题充满了“过早优化”的味道。

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

使用LinkedList会使列表上的所有操作(包括remove())变慢,因为对于每个操作(平均而言),您现在必须遍历所有列表元素的一半。因此,大多数操作将从O(1)变为O(N/2)。

票数 2
EN

Stack Overflow用户

发布于 2009-07-28 09:57:28

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

1)创建和操作模型

2)渲染表

与第二个相比,前者在性能方面的重要性要小得多。

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

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

票数 1
EN

Stack Overflow用户

发布于 2009-07-28 08:16:58

如果您需要频繁地删除元素,则可以选择LinkedList实现。您需要为快速删除而付出一点内存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1192586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档