管理大量布尔状态的最有效方法

时间:2017-04-08 20:52:55

标签: java bit-manipulation

我想管理最多10 ^ 18项的布尔状态(开/关)。在Java中执行此操作的内存和计算效率最高的方法是什么?我不能创建这么大的布尔数组,因为数组大小的基本类型是int,而BitSet类也是如此。

E.g:

long numSwitches = Long.MAX_VALUE;
boolean[] switches = new boolean[numSwitches];

给我一​​个编译错误:Incompatible types, Reguired: int, Found: long

1 个答案:

答案 0 :(得分:3)

老实说,如果不使用超级计算机,我认为这样的事情是不可能的。 10 ^ 18是一个非常大数字,它实际上相对接近单粒盐中的原子数!如果每个原子是1位,那么总内存将超过125PB(125,000太字节)!

即使您希望通过使用某种流顺序访问位(随机访问将要求您将其全部加载到内存中),它仍然需要花费大量时间。

除非一次启用只有几位与总量相比(几十亿,仍然需要几十亿字节的内存),我不认为有任何合理的解决方法。但是,考虑一下它仍然非常有趣。