我的TableModel
实施通常位于ArrayList
,以实现高效的随机访问性能。但是,ArrayList
的{{1}}实现效果相当低,因为它涉及进行remove(int)
调用以将所有后续元素移回1。
人们采用什么方法来实施System.arrayCopy(...)
?我应该考虑更好的数据结构吗? ......也许是第三方图书馆?
更多信息:我的表数据可以缩小和增长,因此任何固定大小的缓冲区实现都无法正常工作。
提前致谢。
答案 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)
如果您需要经常删除元素,可以选择链接列表实现。为快速删除支付一点内存。