Java Bitsetクラス
Bitsetクラスは、ビット値を保存する特殊なタイプの配列を作成します。BitSetの配列サイズは必要に応じて増加します。これはビットベクトル(vector of bits)に似ています。
これは伝統的なクラスですが、Java 2で完全に再設計されました。
BitSetには2つのコンストラクタが定義されています。
最初のコンストラクタはデフォルトのオブジェクトを作成します:
BitSet()
2番目のコンストラクタは、ユーザーが初期サイズを指定できます。すべてのビットは0に初期化されます。
BitSet(int size)
BitSetには、Cloneableインターフェースで定義されたメソッドが実装されており、以下の表に示すとおりです:
| 番号 | メソッド説明 |
|---|---|
| 1 |
void and(BitSet set) このターゲットビットセットと引数のビットセットに対して論理AND演算を実行します。 |
| 2 |
void andNot(BitSet set) この BitSet 内の、指定された BitSet 内で設定されている対応するビットをすべてクリアします。 |
| 3 |
int cardinality( ) この BitSet 内で true に設定されているビット数を返します。 |
| 4 |
void clear( ) この BitSet のすべてのビットを false に設定します。 |
| 5 |
void clear(int index) 指定されたインデックスのビットを false に設定します。 |
| 6 |
void clear(int startIndex, int endIndex) 指定された startIndex(含む)から指定された toIndex(含まない)までの範囲のビットを false に設定します。 |
| 7 |
Object clone( ) この BitSet をコピーして、それと等しい新しい BitSet を生成します。 |
| 8 |
boolean equals(Object bitSet) このオブジェクトを指定されたオブジェクトと比較します。 |
| 9 |
void flip(int index) 指定されたインデックスのビットを現在の値の補数に設定します。 |
| 10 |
void flip(int startIndex, int endIndex) 指定された fromIndex(含む)から指定された toIndex(含まない)までの範囲の各ビットを現在の値の補数に設定します。 |
| 11 |
boolean get(int index) 指定されたインデックスのビット値を返します。 |
| 12 |
BitSet get(int startIndex, int endIndex) この BitSet の fromIndex(含む)から toIndex(含まない)までの範囲のビットで構成される新しい BitSet を返します。 |
| 13 |
int hashCode( ) このビットセットのハッシュコード値を返します。 |
| 14 |
boolean intersects(BitSet bitSet) 指定された BitSet に true に設定されたビットがあり、この BitSet でも true に設定されている場合、true を返します。 |
| 15 |
boolean isEmpty( ) この BitSet に true に設定されたビットが含まれていない場合、true を返します。 |
| 16 |
int length( ) この BitSet の「論理サイズ」を返します:BitSet 内で最も高い設定ビットのインデックスに 1 を加えた値。 |
| 17 |
int nextClearBit(int startIndex) 指定された開始インデックス以降で、false に設定されている最初のビットのインデックスを返します。 |
| 18 |
int nextSetBit(int startIndex) 指定された開始インデックス以降で、true に設定されている最初のビットのインデックスを返します。 |
| 19 |
void or(BitSet bitSet) このビットセットと引数のビットセットに対して論理OR演算を実行します。 |
| 20 |
void set(int index) 指定されたインデックスのビットを true に設定します。 |
| 21 |
void set(int index, boolean v) 指定されたインデックスのビットを指定された値に設定します。 |
| 22 |
void set(int startIndex, int endIndex) 指定された fromIndex(含む)から指定された toIndex(含まない)までの範囲のビットを true に設定します。 |
| 23 |
void set(int startIndex, int endIndex, boolean v) 指定された fromIndex(含む)から指定された toIndex(含まない)までの範囲のビットを指定された値に設定します。 |
| 24 |
int size( ) この BitSet がビット値を表すために実際に使用しているスペースのビット数を返します。 |
| 25 |
String toString( ) このビットセットの文字列表現を返します。 |
| 26 |
void xor(BitSet bitSet) このビットセットと引数のビットセットに対して論理XOR演算を実行します。 |
例
以下のプログラムは、このデータ構造がサポートするいくつかのメソッドを示しています。
例
import java.util.BitSet;
public class BitSetDemo {
public static void main(String args[]) {
BitSet bits1 = new BitSet(16);
BitSet bits2 = new BitSet(16);
// set some bits
for(int i=0; i<16; i++) {
if((i%2) == 0) bits1.set(i);
if((i%5) != 0) bits2.set(i);
}
System.out.println("Initial pattern in bits1: ");
System.out.println(bits1);
System.out.println("\nInitial pattern in bits2: ");
System.out.println(bits2);
// AND bits
bits2.and(bits1);
System.out.println("\nbits2 AND bits1: ");
System.out.println(bits2);
// OR bits
bits2.or(bits1);
System.out.println("\nbits2 OR bits1: ");
System.out.println(bits2);
// XOR bits
bits2.xor(bits1);
System.out.println("\nbits2 XOR bits1: ");
System.out.println(bits2);
}
}
上記の例をコンパイルして実行した結果は次のとおりです:
Initial pattern in bits1:
{0, 2, 4, 6, 8, 10, 12, 14}
Initial pattern in bits2:
{1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14}
bits2 AND bits1:
{2, 4, 6, 8, 12, 14}
bits2 OR bits1:
{0, 2, 4, 6, 8, 10, 12, 14}
bits2 XOR bits1:
{}
その他の拡張
Java データ構造