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

Héc*_*orn 2 java arrays

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

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

das*_*ght 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.这里给出一个很好的解释.