Java 如何创建位集对象数组?

Java 如何创建位集对象数组?,java,arrays,bitset,Java,Arrays,Bitset,我有一个项目,我正在处理一个2d单元格数组,我目前使用的是布尔[240][135] 数组,大约是32k个元素(当我把一个单元格的大小减半时是64k)。我想创建一个CellMap类,它使用一个位集数组来存储这些信息。我曾考虑过创建一个Byte[]并将true/false的值设为0或1,但这会为每个条目浪费7位的空间。布尔值可以根据VSM以各种方式存储这一事实布尔值数组在内存上似乎比字节数组更糟糕 我能想到的唯一其他选择是创建一个类,将信息存储在两种类型的btye数组中。压缩和膨胀。在压缩字节数组中

我有一个项目,我正在处理一个2d单元格数组,我目前使用的是布尔[240][135] 数组,大约是32k个元素(当我把一个单元格的大小减半时是64k)。我想创建一个CellMap类,它使用一个位集数组来存储这些信息。我曾考虑过创建一个Byte[]并将true/false的值设为0或1,但这会为每个条目浪费7位的空间。布尔值可以根据VSM以各种方式存储这一事实布尔值数组在内存上似乎比字节数组更糟糕

我能想到的唯一其他选择是创建一个类,将信息存储在两种类型的btye数组中。压缩和膨胀。在压缩字节数组中,每一位表示布尔真/假。在臃肿的字节数组中,每个字节都代表一个真/假(0b00000001和0b00000000),在这种情况下,8个布尔字节可以存储在一个字节中。尽管如此,要想获得看似有限的回报,仍有很多数据需要处理

只是想到了另一种方法。可以简单地使用线性(单个)位集并进行一些转换,将二维坐标转换为一维索引。思想?哦,顺便说一句,我用Java来表示这个=p


编辑到目前为止我倾向于最后一个解决方案。。。我已经设法在几分钟内编写了它,到目前为止结果还不错。

从内存使用的角度来看,您的最后一种方法当然是最好的


从易于编程、可读性和速度的角度来看,您应该简单地使用一个二维布尔数组,然后使用它。32KB比现在网站上的一个简单图像要小,所以只要你不是针对某种嵌入式系统,它应该一点问题都没有。

如果你的问题在标题中准确地表达出来:

BitSet[] array = new BitSet[1024]; // or whatever you need

如果这不是您问题的答案,那么这里没有明显的问题可以回答。

这取决于您需要支持哪些操作。只是测试、设置和清除单个细胞?我们应该等待和观察吗?这仍然是一个问题吗?我认为这类问题更适合程序员堆栈交换频道。Sry伙计们,我的第一篇文章是这样的。我是一个非常棒的程序员,刚从Actionscript的背景中进入Java。我想创建一个位集数组来模拟2d布尔数组。我的想法是,如果布尔值可以存储在单个位中,那么在每次更新方法调用时通过每个元素运行for循环时,它将有助于提高计算速度。我最近刚刚了解了位集,但我对它的了解还不够,无法真正知道它们是否比布尔数组更快。根据我收集的数据,布尔数组可以根据VSM以不同的字节大小存储。是的,sry的伙计们。。。当我把问题打出来时,它变得更清楚了,是的,第三个选项似乎是最好的。。。一段内存和一些用于计算线性索引的基本数学运算运行良好。至于其余的评论,我们将不胜感激。就项目而言,它只是计算型的,生活型的游戏。我以低帧速率运行我的程序,因为我开始在较高的帧速率下丢失帧,我想从中获得更多,我认为最好的方法是缩小数据并尽可能优化。无论如何,问题已经解决了,谢谢你们的意见。回答得很好,但不是我的意思。我应该说我可以创建一个位集数组,这样我就可以模拟一个二维布尔数组。