5

我不太明白size()length()in的不同含义BitSet。检查下面的代码:

public class Sandbox {

   public static void main(String argv[]) 
   {
       BitSet bitSet1 = new BitSet(16);
       bitSet1.set(0);
       bitSet1.set(8);
       bitSet1.set(15);
       displayBitSet(bitSet1);
       
    
 
   }
   
   static void displayBitSet(BitSet bitSet)
   {
       for(int i=0;i<bitSet.size();i++)
       {
           boolean bit = bitSet.get(i);
           System.out.print(bit?1:0);
       }
       System.out.println(" "+bitSet.size()+" "+bitSet.length());
   }
 
}

输出是:

1000000010000001000000000000000000000000000000000000000000000000 64 16

我以为我会得到类似的东西

1000000010000001 16 16

这些尾随零来自哪里?谁可以给我解释一下这个?谢谢~~

4

2 回答 2

4

答案很简单,BitSet构造函数只是说它生成了足够大到给定大小的东西,实际上它需要一些最匹配的内部大小。

在您的情况下,这是 64 位,请参阅JavaDoc

于 2012-11-06T07:08:14.040 回答
4

如果您看到 的文档BitSet#size,它会说:

返回此 BitSet 实际使用的空间位数,以表示位值。集合中的最大元素是大小 - 第一个元素。

对于BitSet#length

返回此 BitSet 的“逻辑大小”:BitSet 中最高设置位的索引加一。如果 BitSet 不包含设置位,则返回零。

因此,BitSet.length如果您想获得bitsbitset 中的实际数量,您应该使用 。因为,返回您的实例BitSet.size占用的内存。BitSet

另外,根据文档

请注意,大小与位集的实现有关,因此它可能会随着实现而改变

因此,当您在索引处设置大于指定长度的位时,您的大小为 64 位,它可以自动更改。

于 2012-11-06T07:09:31.117 回答