JAVA BitSet 设置

JAVA BitSet setting

我正在 Java (JDK 1.8) 中开发并操作 BitSet。我偶然发现 一个奇怪的问题。

我正在实例化一个大小为 160 的 BitSet,例如:

BitSet example = new BitSet(160);

我想使用给出位集中位数的 size() 方法检查大小。在文档中说,以 int N 作为参数的构造函数正在创建一个 N 位的位集。

但是当我在 和

之后检查尺寸时
example.size()

我获取值

192

我不明白为什么,有人遇到过这种问题吗? link 到文档:http://docs.oracle.com/javase/7/docs/api/java/util/BitSet.html

这是因为BitSet构造函数在参数给定的范围内创建了BitSet"whose initial size is large enough to explicitly represent"位。所以实际的 size 至少 您在参数中给出的数字,但 不一定 等于该数字。

它特别使用 192 的原因是 192 是一个相当不错的二进制数:64 * 3。

因为BitSet其实是用long[]来存储0/1的。

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