我有一个项目,我正在处理一个2d的单元格数组,我目前正在使用布尔值[240] [135] 数组,大约32k元素(当我将一个单元格的大小减半时为64k)。我想创建一个使用BitSet数组来存储该信息的CellMap类。我曾想过创建一个Byte []并只为0或1设置true / false,但是每个条目都浪费了7位浪费空间。并且布尔值可以以各种方式存储,这取决于VSM,布尔数组在内存上看起来甚至比字节数组更差。
我能想到的唯一另一个选择是创建一个类,它将信息存储在两种类型的btye数组中。压缩和膨胀。在压缩字节数组中,每个位表示布尔值true / false。在膨胀字节数组中,每个字节代表一个真/假(0b00000001和0b00000000),在这个情况下,8个布尔字节可以存储在一个字节中。仍然有很多数字可以为看似有限的回报而紧缩。
想到另一种方法。可以简单地使用线性(单个)BitSet并进行一些转换以将2d coords转换为1d索引。虽然?哦,BTW我正在使用Java = p
编辑到目前为止,我倾向于最后一个解决方案......我已经设法在一段时间内对其进行编码,到目前为止结果还不错。
答案 0 :(得分:1)
如果您的问题在标题中准确表达:
BitSet[] array = new BitSet[1024]; // or whatever you need
如果这不是你问题的答案,那么这里没有明显的问题要回答。
答案 1 :(得分:0)
从内存使用的角度来看,你的最后一种方法当然是最好的方法。
从编程的易用性,可读性和速度的角度来看,你应该简单地使用一个二维的布尔数组并完成它。现在32KB不如网站上的简单图像,所以只要你没有针对某种嵌入式系统,就应该没问题了。