性能:包含大量对象的列表 VS 包含较小列表的大量对象
Performance: List containing lots of objects VS lots of objects containing smaller lists
我目前正在开发我自己的应用程序(只是著名的 "Game of Life" 的另一个翻版),我想添加一个 "revert" 按钮。我的游戏基本上由一个二维数组组成:Cell[][]...
所以:我的想法是创建一个 ArrayList ,该数组被添加到每个更新中......(限制为 50 个条目)
但后来我想,那个列表中会有很多对象......所以:
在二维数组的每个单元格中都有一个 ArrayList 包含其自身的历史,或者有一个包含整个游戏状态的巨大 ArrayList 作为历史是否会更高效?
(我认为您不需要我的任何代码来回答这个问题,但如果您需要,我会 post)
在我看来,每个单元格 ArrayList
就可以了;但是,如果您只想存储 50 个状态,则必须创建自定义 ADT 或使用 Guava 的 Collections API.
我建议使用 Stack
而不是 ArrayList
,因为还原每个单元格是一个简单的操作。在 Java 中,要使用的正确 ADT 是 ArrayDeque
,但您必须自己处理容量。
而不是存储细胞状态,为什么不保留改变细胞状态的事件?一个事件将简单地封装前一个状态信息和下一个状态,或者甚至是一个可以反向执行的编码枚举。这已经大大减少了您需要存储的数据。
此外,如果您是在本机工作,或者在 Java 或 C# 等垃圾收集 VM 平台上工作,这也会有所不同。前者往往更快,并且在大型寻址存储方面更宽容,而如果存储大量对象,后者可能会开始疯狂地垃圾处理。
但布丁的真正证据是吃 / tinstatfc:没有最快的代码这样的东西 (c) Michael Abrash -> 即对您的代码进行基准测试并找出答案! (来告诉我们)
我目前正在开发我自己的应用程序(只是著名的 "Game of Life" 的另一个翻版),我想添加一个 "revert" 按钮。我的游戏基本上由一个二维数组组成:Cell[][]... 所以:我的想法是创建一个 ArrayList ,该数组被添加到每个更新中......(限制为 50 个条目) 但后来我想,那个列表中会有很多对象......所以:
在二维数组的每个单元格中都有一个 ArrayList 包含其自身的历史,或者有一个包含整个游戏状态的巨大 ArrayList 作为历史是否会更高效?
(我认为您不需要我的任何代码来回答这个问题,但如果您需要,我会 post)
在我看来,每个单元格 ArrayList
就可以了;但是,如果您只想存储 50 个状态,则必须创建自定义 ADT 或使用 Guava 的 Collections API.
我建议使用 Stack
而不是 ArrayList
,因为还原每个单元格是一个简单的操作。在 Java 中,要使用的正确 ADT 是 ArrayDeque
,但您必须自己处理容量。
而不是存储细胞状态,为什么不保留改变细胞状态的事件?一个事件将简单地封装前一个状态信息和下一个状态,或者甚至是一个可以反向执行的编码枚举。这已经大大减少了您需要存储的数据。
此外,如果您是在本机工作,或者在 Java 或 C# 等垃圾收集 VM 平台上工作,这也会有所不同。前者往往更快,并且在大型寻址存储方面更宽容,而如果存储大量对象,后者可能会开始疯狂地垃圾处理。
但布丁的真正证据是吃 / tinstatfc:没有最快的代码这样的东西 (c) Michael Abrash -> 即对您的代码进行基准测试并找出答案! (来告诉我们)