Java BitSet size() 行为

egg*_*ant 1 java arrays bitset

由于存在库,我计划使用 BitSet 来操作 byte[] 中的位。

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

IE。

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()); 
Run Code Online (Sandbox Code Playgroud)

我可能最终会编写自己的函数,但我很好奇为什么会发生这种情况。

谢谢!

Gho*_*ica 5

只需阅读javadoc:

size()返回此 BitSet 实际使用的空间位数,以表示位值。

事情是:BitSet 预分配空间;这就是 size() 告诉你的!它并不能告诉你有多少位正是你“放”进了!

换句话说:BitSet 以 64 个“空”位开始;一旦你“输入”一个需要超过 64 个的值;你去 128 位的“分配”。另请注意, size() 取决于 JDK 的BitSet.

您可能想要研究length()和。值() ; 可能这会帮助你解决你的问题。