Java BitSet size() 行为

Java BitSet size() behavior

我正计划使用 BitSet 来操作 byte[] 中的位,因为存在一个库。

但是,似乎在从一个byte[]创建一个BitSet之后,BitSet的最小大小是64,否则它最终为零。 有没有要求必须有8个字节? 此外,等于零的 byte[] 将始终以零大小显示。我假设它仍然会输出字节数组的大小?

即。

BitSet bs1 = BitSet.valueOf(new byte[] {0, 0, 0, 0, 0, 0, 1});  // bs1.size() == 64
BitSet bs2 = BitSet.valueOf(new byte[] {0, 0, 0, 0, 0, 0, 0, 1}); // bs2.size() == 64
BitSet bs3 = BitSet.valueOf(new byte[] {0, 0, 0, 0, 0, 0, 0, 0, 1});  // bs3.size() == 128
BitSet bs4 = BitSet.valueOf(new byte[] {0, 0, 0, 0, 0, 0, 0, 0, 0});  // bs4.size() == 0
System.out.print(bs1.size() + " " + bs2.size() + " " + bs3.size() + " " +  bs4.size()); 

我可能最终会编写自己的函数,但我很好奇为什么会这样。

谢谢!

刚刚阅读了 javadoc:

size(): Returns 此 BitSet 实际使用的 space 位数来表示位值。

事情是:BitSet 预分配 space;这就是 size() 告诉你的!它 不会 告诉您 "put" 到底有多少位!

换句话说:BitSet 以 64 "empty" 位开始;一旦你 "put in" 一个需要超过 64 个的值;你转到 "allocation" 的 128 位。另请注意 size() 取决于您的 JDK 对 BitSet.

的实现

您可能想查看 length() resp. valueOf();可能这将帮助您解决问题。