Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实现大型2D位阵列的最佳方法_Java_Arrays_Boolean_Bit - Fatal编程技术网

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

Java 实现大型2D位阵列的最佳方法,java,arrays,boolean,bit,Java,Arrays,Boolean,Bit,我正在通过优化生活游戏程序来教自己一些更高级的Java 到目前为止,我已经使用多线程和标记世界的一部分来加速它。 但是,世界数组当前是一个字节的2D数组,创建一个远远大于30000*30000的世界大小会导致java堆空间错误。 有什么更好的方法可以存储非常大的布尔/位2D数组?您可以使用一个包含30000 x 30000位的大型位集 但即使这样,内存消耗也将相当高,您可能会遇到严重的性能问题。可能需要一个更聪明的解决方案,使用一个只保存整个世界非空部分的稀疏数据结构 另请参见。考虑“Hashl

我正在通过优化生活游戏程序来教自己一些更高级的Java

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

您可以使用一个包含30000 x 30000位的大型
位集

但即使这样,内存消耗也将相当高,您可能会遇到严重的性能问题。可能需要一个更聪明的解决方案,使用一个只保存整个世界非空部分的稀疏数据结构


另请参见。

考虑“Hashlife”算法。将2D位数组实现为“四叉树”。非叶节点指向具有父节点一半跨度的4个子节点(西北、东北、西南、东南)。它建立了一个2D位数组,并有一个非常聪明的“记忆”算法用于计算后代

下面是一个用Java演示的演练:


看看ImageRaster是如何工作的:它使用了
long[]
,这是一种“包装良好的类型”。这些操作将2d到1d查找分解,并将组件(R/G/B)值作为位进行处理。使用这种方法,30k x 30k字段将只占用约112MB的空间。