5

size()length()のの意味がよくわかりません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 によって実際に使用されているスペースのビット数を返します。セット内の最大要素は size - 1 番目の要素です。

そしてのためにBitSet#length

この BitSet の「論理サイズ」を返します。BitSet 内の最高セット ビットのインデックスに 1 を加えた値です。BitSet にセット ビットが含まれていない場合はゼロを返します。

したがって、ビットセット内BitSet.lengthの の実際の数を取得する場合は、を使用する必要がbitsあります。なぜなら、インスタンスBitSet.sizeが占有しているメモリを返すからです。BitSet

また、ドキュメントによると:

サイズはビット セットの実装に関連するため、実装によって変わる可能性があることに注意してください。

したがって、あなたの場合のサイズは 64 ビットであり、指定された長さよりも大きいインデックスにビットを設定すると、自動的に変更される可能性があります。

于 2012-11-06T07:09:31.117 に答える