性能:包含大量对象的列表VS包含较小列表的大量对象

时间:2017-10-03 20:57:10

标签: java performance arraylist history revert

我目前正在开发自己的应用程序(只是着名的“生命游戏”的另一部重拍),我想添加一个“恢复”按钮。我的游戏基本上由一个二维数组组成:Cell [] [] ...... 所以:我的想法是创建一个ArrayList,该数组被添加到每个更新...(限制为50个条目) 但后来我想,那个列表中会有很多对象......所以:

在二维数组中的每个单元格中包含ArrayList,包含其自身的历史,或者将包含整个游戏状态的巨大ArrayList作为历史记录会更高效吗?

(我认为你不需要我的任何代码来回答这个问题,但如果你这样做我会发布它)

2 个答案:

答案 0 :(得分:0)

在我看来,每个单元格ArrayList可以正常工作;但是,如果您只想存储50个州,则必须创建自定义ADT或使用Guava的Collections API。

我建议使用Stack而不是ArrayList,因为恢复每个单元格将是一个简单的操作。在Java中,要使用的正确ADT是ArrayDeque,但您必须自己处理容量。

答案 1 :(得分:0)

为什么不保留转换单元状态的事件,而不是存储单元状态?事件将简单地封装先前的状态信息和下一个状态,或者甚至可以封装可以反向执行的编码枚举。这将显着减少您需要存储的数据。

此外,如果您是在本地工作,或者在垃圾收集VM平台(如Java或C#)上,它会有所不同。前者往往更快,并且在大型寻址存储方面更宽容,而后者如果存储大量对象则会开始疯狂。

但布丁的真实证据在于吃/吃:没有最快的代码(c)Michael Abrash - >即基准你的代码并找出答案! (并告诉我们)