Java BitSet size()行为

时间:2016-12-02 18:47:16

标签: java arrays bitset

由于存在库,我计划使用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()); 

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

谢谢!

1 个答案:

答案 0 :(得分:4)

请阅读javadoc:

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

事情是:BitSet预先分配空间;这就是size()告诉你的内容!它确实告诉你确切地“放入”多少位!

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

您可能需要查看length() resp。 valueOf();这可能会帮助您解决问题。