2015-07-04 53 views
1

我正在开发Java(JDK 1.8)和操作BitSets。我遇到了一个奇怪的问题 。JAVA BitSet设置

我实例大小160的位集合喜欢:

BitSet example = new BitSet(160); 

我想用的尺寸()方法,该方法给出了位集的比特数来检查尺寸。在文档中说,具有int N参数的构造函数创建了一个N位的位集。

但是当我做与

example.size() 

后立即检查大小我获得价值

192 

我不明白为什么,没有人穿过这种问题就来了? 链接到文件:http://docs.oracle.com/javase/7/docs/api/java/util/BitSet.html

+3

从DOC:_Creates有点一套它的初始大小**足够大**通过显式表示索引范围在0位和nbits-1._ –

回答

5

这是因为BitSet构造函数创建一个BitSet“它的初始大小足以明确表示”位由参数给出的范围。所以实际size将是至少您给参数中的数字,但而不是必然等于该数字。

它尤其使用192的原因是,192是一个相当不错的二进制数:64 * 3.

+0

好吧,我现在看到了,非常感谢你许多!所以我猜想没有办法创建一个包含构造函数中给定位数的位集。我将使用一个简单的数组。 –

+0

@thiout_p为什么你需要一个*完全*特定大小的bitset?您是否确定您正在构建的程序的内存限制非常严格? –

+0

@RRedRobotHood这只是我必须实现一个模块,这是一个块,我想尽可能地坚持下去,但我会做其他事情。感谢您指出文档中的重要词语! –

0

由于位集合实际上是用长[]存储0/1。

private void initWords(int nbits) { 
    words = new long[wordIndex(nbits-1) + 1]; 
}