念頭に置いておくべき100万個ほどのフラグtrue/falseの配列があります。BitSetは役に立ちますか?
BitSetには数十億ビットを含めることができます。
Setを実装していますが、配列boolean []であるかのように、その要素を高速に反復することは可能ですか?
boolean []はビットごとに1バイトを使用しますが(ほとんどのJVMで)、BitSetはビットごとに1ビットを使用します。小さな配列の場合、boolean []の方が高速ですが、CPUキャッシュのサイズをテストする場合は、BitSetの方が効率的です。
ところで:ビットセットの使用は、メモリの各ワードからビットを抽出する必要があるため、小さいサイズでは少し遅くなります。Abyte[]
にも同じ問題があるため、自分でビットを設定する場合は、int[]
BitSetと同じように使用することをお勧めします。
BitSetを使用した例
BitSet bitSet = new BitSet();
// set bit 100
bitSet.set(100);
// get bit 99
System.out.println("bit 99 is " + bitSet.get(99));
System.out.println("bit 100 is " + bitSet.get(100) + " after set");
bitSet.clear(100);
System.out.println("bit 100 is " + bitSet.get(100) + " after clear");
プリント
bit 99 is false
bit 100 is true after set
bit 100 is false after clear