实现大型2D位阵列的最佳方法

时间:2015-05-18 21:22:08

标签: java arrays boolean bit

我通过优化生命游戏计划来自学一些更高级的Java。

到目前为止,我已经使用多线程加速并标记了世界的一部分Dirty。 但是,World数组当前是一个2D字节数组,并且创建一个远大于30000 * 30000的世界大小会导致java堆空间错误。 有什么更好的方法可以存储一个非常大的布尔/比特二维数组?

2 个答案:

答案 0 :(得分:3)

你可以使用一个大的BitSet和30,000 x 30,000位。

但即便如此,内存消耗也会相当高,您可能会遇到严重的性能问题。可能需要使用稀疏数据结构的更聪明的解决方案,该结构仅包含整个世界的非空部分。

另见SparseBitSet

答案 1 :(得分:1)

考虑一下' Hashlife'算法。这将您的2D位阵列实现为四叉树'。非叶节点指向具有父节点跨度的一半的4个子节点(西北,东北,西南,东南)。这构建了一个2D位阵列,并且有一个非常聪明的记忆'计算后代的算法。

幸运的是,您可以在Java中演示:

http://www.drdobbs.com/jvm/an-algorithm-for-compressing-space-and-t/184406478