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整数来实现自己的位集,然后使用位操作来访问相应的位:
BitSet
int
5000000000 / 32
long
pos
(int)(pos / 32)
(int)(pos % 32)
另一种方法是切换到分段筛,将内存需求降低到√N.这里给出了一个很好的解释.
归档时间:
10 年,9 月 前
查看次数:
234 次
最近记录: