如果Java中的数组太小,该怎么用?

时间:2015-06-07 17:29:14

标签: java arrays

在java中,一个数组最多可以包含Integer.MAX_VALUE项,因为它使用整数作为数组的键。 当我想使用long作为索引时,最好使用的对象是什么?

例如,如果我想使用主筛计算低于50亿的所有素数,我就不能使用数组,因为5000000000太大而无法存储在整数中。

1 个答案:

答案 0 :(得分:8)

500万个元素的筛子不需要5,000,000,000个值的数组;它需要5,000,000,000 。不幸的是,BitSet也使用int索引,但您可以通过分配5000000000 / 32整数来实现自己的位集,然后使用位操作来访问相应的位:

  • 使用long作为实际位置pos
  • int数组中int的位置为(int)(pos / 32)
  • int内的位位置为(int)(pos % 32)

另一种方法是切换到分段筛,这会将内存需求减少到√N。 here给出了对其工作原理的一个很好的解释。