我想管理最多10 ^ 18项的布尔状态(开/关)。在Java中执行此操作的内存和计算效率最高的方法是什么?我不能创建这么大的布尔数组,因为数组大小的基本类型是int
,而BitSet
类也是如此。
E.g:
long numSwitches = Long.MAX_VALUE;
boolean[] switches = new boolean[numSwitches];
给我一个编译错误:Incompatible types, Reguired: int, Found: long
答案 0 :(得分:3)
老实说,如果不使用超级计算机,我认为这样的事情是不可能的。 10 ^ 18是一个非常大数字,它实际上相对接近单粒盐中的原子数!如果每个原子是1位,那么总内存将超过125PB(125,000太字节)!
即使您希望通过使用某种流顺序访问位(随机访问将要求您将其全部加载到内存中),它仍然需要花费大量时间。
除非一次启用只有几位与总量相比(几十亿,仍然需要几十亿字节的内存),我不认为有任何合理的解决方法。但是,考虑一下它仍然非常有趣。