モジュール java.base
パッケージ java.util

クラスBitSet

  • すべての実装されたインタフェース:
    Serializable, Cloneable

    public class BitSet
    extends Object
    implements Cloneable, Serializable
    このクラスは、必要に応じて大きくなるビット・ベクトルを実装します。 ビット・セットの各コンポーネントは、boolean値を持ちます。 BitSetのビットには、負でない整数のインデックスが付けられます。 インデックスが付けられた個別のビットは、試験したり、設定したり、クリアしたりできます。 また、論理積、包含的論理和、および排他的論理和の演算を行うと、あるBitSetを使って別のBitSetの内容を変更できます。

    デフォルトでは、セットのすべてのビットは初期値としてfalseを持ちます。

    ビット・セットの、現在のサイズは、そのビット・セットによって現在使用されているスペースのビット数です。 このサイズはビット・セットの実装と関連するので、サイズは実装によって変わる場合があります。 ビット・セットの長さはビット・セットの論理的な長さと関連し、実装とは関係なく定義されます。

    特に明記されていないかぎり、nullパラメータをBitSetのメソッドに渡すと、NullPointerExceptionがスローされます。

    BitSetが、外部の同期化を行わずにマルチ・スレッドを使用するのは安全ではありません。

    導入されたバージョン:
    1.0
    関連項目:
    直列化された形式
    • コンストラクタのサマリー

      コンストラクタ 
      コンストラクタ 説明
      BitSet()
      新規ビット・セットを作成します。
      BitSet​(int nbits)
      0 - nbits-1の範囲のインデックスを持つビットを明示的に表すために十分な初期サイズを持つビット・セットを作成します。
    • メソッドのサマリー

      すべてのメソッド staticメソッド インスタンス・メソッド 具象メソッド 
      修飾子と型 メソッド 説明
      void and​(BitSet set)
      ターゲット・ビット・セットと引数ビット・セットの論理積を取ります。
      void andNot​(BitSet set)
      対応するビットが、指定されたBitSet内に設定されているこのBitSet内のすべてのビットをクリアします。
      int cardinality()
      このBitSetで、trueに設定されたビットの数を返します。
      void clear()
      このBitSet内のビットをすべてfalseに設定します。
      void clear​(int bitIndex)
      インデックスで指定されたビットをfalseに設定します。
      void clear​(int fromIndex, int toIndex)
      指定されたfromIndex (これを含む)から指定されたtoIndex (これを含まない)までのビットをfalseに設定します。
      Object clone()
      このBitSetをクローニングして、それと同等の新しいBitSetを作成します。
      boolean equals​(Object obj)
      このオブジェクトと指定されたオブジェクトを比較します。
      void flip​(int bitIndex)
      現在値の補数に指定されたインデックスのビットを設定します。
      void flip​(int fromIndex, int toIndex)
      指定されたfromIndex (これを含む)から指定されたtoIndex (これを含まない)までの各ビットをその現在値の補数に設定します。
      boolean get​(int bitIndex)
      指定されたインデックスを持つビットの値を返します。
      BitSet get​(int fromIndex, int toIndex)
      このBitSetからのビットで構成される新規BitSetfromIndex (これを含む)からtoIndex (これを含まない)まで返します。
      int hashCode()
      このビット・セットのハッシュ・コード値を返します。
      boolean intersects​(BitSet set)
      このBitSetでもtrueに設定された、true設定のビットが、指定されたBitSetにある場合、trueを返します。
      boolean isEmpty()
      このBitSettrueに設定されたビットが含まれていない場合は、trueを返します。
      int length()
      このBitSetの「論理サイズ」、つまりBitSetの最上位セット・ビットのインデックスに1を加えた値を返します。
      int nextClearBit​(int fromIndex)
      指定された開始インデックス時、またはそのインデックス後に生じる、falseに設定された最初のビットのインデックスを返します。
      int nextSetBit​(int fromIndex)
      指定された開始インデックス時、またはそのインデックス後に生じる、trueに設定された最初のビットのインデックスを返します。
      void or​(BitSet set)
      ビット・セットとビット・セット引数の論理和を取ります。
      int previousClearBit​(int fromIndex)
      指定された開始インデックス時、またはそのインデックス前に生じる、falseに設定されたもっとも近いビットのインデックスを返します。
      int previousSetBit​(int fromIndex)
      指定された開始インデックス時、またはそのインデックス前に生じる、trueに設定されたもっとも近いビットのインデックスを返します。
      void set​(int bitIndex)
      指定されたインデックスのビットをtrueに設定します。
      void set​(int bitIndex, boolean value)
      指定されたインデックスのビットを指定された値に設定します。
      void set​(int fromIndex, int toIndex)
      指定されたfromIndex (これを含む)から指定されたtoIndex (これを含まない)までのビットをtrueに設定します。
      void set​(int fromIndex, int toIndex, boolean value)
      指定されたfromIndex (これを含む)から指定されたtoIndex (これを含まない)までのビットを指定された値に設定します。
      int size()
      このBitSetでビット値を表すために実際に使用しているビットの数を返します。
      IntStream stream()
      このBitSetにビットが設定状態で保持されているインデックスのストリームを返します。
      byte[] toByteArray()
      このビット・セット内のすべてのビットを含む新しいバイト配列を返します。
      long[] toLongArray()
      このビット・セット内のすべてのビットを含む新しいlong配列を返します。
      String toString()
      ビット・セットの文字列表現を返します。
      static BitSet valueOf​(byte[] bytes)
      指定されたバイト配列内のすべてのビットを含む新しいビット・セットを返します。
      static BitSet valueOf​(long[] longs)
      指定されたlong配列内のすべてのビットを含む新しいビット・セットを返します。
      static BitSet valueOf​(ByteBuffer bb)
      指定されたbyteバッファ内の、その位置から上限までのすべてのビットを含む新しいビット・セットを返します。
      static BitSet valueOf​(LongBuffer lb)
      指定されたlongバッファ内の、その位置から上限までのすべてのビットを含む新しいビット・セットを返します。
      void xor​(BitSet set)
      ビット・セットとビット・セット引数の排他的論理和を取ります。
    • コンストラクタの詳細

      • BitSet

        public BitSet()
        新規ビット・セットを作成します。 ビットの初期値はすべてfalseです。
      • BitSet

        public BitSet​(int nbits)
        0 - nbits-1の範囲のインデックスを持つビットを明示的に表すために十分な初期サイズを持つビット・セットを作成します。 ビットの初期値はすべてfalseです。
        パラメータ:
        nbits - ビット・セットの初期サイズ
        例外:
        NegativeArraySizeException - 指定された初期サイズが負の場合
    • メソッドの詳細

      • valueOf

        public static BitSet valueOf​(long[] longs)
        指定されたlong配列内のすべてのビットを含む新しいビット・セットを返します。

        より正確には、
        すべてのn < 64 * longs.lengthに対して
        BitSet.valueOf(longs).get(n)==((longs[n/64] & (1L<<(n%64)))!= 0)となります。

        このメソッドは、BitSet.valueOf(LongBuffer.wrap(longs))と同等です。

        パラメータ:
        longs - 新規ビット・セットの初期ビットとして使用されるビット・シーケンスのリトル・エンディアン表現を含むlong配列
        戻り値:
        long配列内のすべてのビットを含むBitSet
        導入されたバージョン:
        1.7
      • valueOf

        public static BitSet valueOf​(LongBuffer lb)
        指定されたlongバッファ内の、その位置から上限までのすべてのビットを含む新しいビット・セットを返します。

        より正確には、
        すべてのn < 64 * lb.remaining()に対して
        BitSet.valueOf(lb).get(n)==((lb.get(lb.position()+n/64)& (1L<<(n%64)))!= 0)となります。

        longバッファはこのメソッドによって変更されず、このバッファへの参照はビット・セットによって保存されません。

        パラメータ:
        lb - 新規ビット・セットの初期ビットとして使用される、その位置から上限までのビット・シーケンスのリトル・エンディアン表現を含むlongバッファ
        戻り値:
        指定された範囲のバッファ内のすべてのビットを含むBitSet
        導入されたバージョン:
        1.7
      • valueOf

        public static BitSet valueOf​(byte[] bytes)
        指定されたバイト配列内のすべてのビットを含む新しいビット・セットを返します。

        より正確には、
        すべてのn < 8 * bytes.lengthに対して
        BitSet.valueOf(bytes).get(n)==((bytes[n/8] & (1<<(n%8)))!= 0)となります。

        このメソッドは、BitSet.valueOf(ByteBuffer.wrap(bytes))と同等です。

        パラメータ:
        bytes - 新規ビット・セットの初期ビットとして使用されるビット・シーケンスのリトル・エンディアン表現を含むバイト配列
        戻り値:
        バイト配列内のすべてのビットを含むBitSet
        導入されたバージョン:
        1.7
      • valueOf

        public static BitSet valueOf​(ByteBuffer bb)
        指定されたbyteバッファ内の、その位置から上限までのすべてのビットを含む新しいビット・セットを返します。

        より正確には、
        すべてのn < 8 * bb.remaining()に対して
        BitSet.valueOf(bb).get(n)==((bb.get(bb.position()+n/8)& (1<<(n%8)))!= 0)となります。

        byteバッファはこのメソッドによって変更されず、このバッファへの参照はビット・セットによって保存されません。

        パラメータ:
        bb - 新規ビット・セットの初期ビットとして使用される、その位置から上限までのビット・シーケンスのリトル・エンディアン表現を含むbyteバッファ
        戻り値:
        指定された範囲のバッファ内のすべてのビットを含むBitSet
        導入されたバージョン:
        1.7
      • toByteArray

        public byte[] toByteArray()
        このビット・セット内のすべてのビットを含む新しいバイト配列を返します。

        より正確には、
        byte[] bytes = s.toByteArray();の場合
        すべてのn < 8 * bytes.lengthに対して
        bytes.length ==(s.length()+7)/8および
        s.get(n)==((bytes[n/8] & (1<<(n%8)))!= 0)となります。

        戻り値:
        このビット・セットのすべてのビットのリトル・エンディアン表現を含むバイト配列
        導入されたバージョン:
        1.7
      • toLongArray

        public long[] toLongArray()
        このビット・セット内のすべてのビットを含む新しいlong配列を返します。

        より正確には、
        long[] longs = s.toLongArray();の場合
        すべてのn < 64 * longs.lengthに対して
        longs.length ==(s.length()+63)/64および
        s.get(n)==((longs[n/64] & (1L<<(n%64)))!= 0)となります。

        戻り値:
        このビット・セットのすべてのビットのリトル・エンディアン表現を含むlong配列
        導入されたバージョン:
        1.7
      • flip

        public void flip​(int bitIndex)
        現在値の補数に指定されたインデックスのビットを設定します。
        パラメータ:
        bitIndex - 反転するビットのインデックス
        例外:
        IndexOutOfBoundsException - 指定されたインデックスが負の値の場合
        導入されたバージョン:
        1.4
      • flip

        public void flip​(int fromIndex,
                         int toIndex)
        指定されたfromIndex (これを含む)から指定されたtoIndex (これを含まない)までの各ビットをその現在値の補数に設定します。
        パラメータ:
        fromIndex - 反転する最初のビットのインデックス
        toIndex - 反転する最後のビットの後ろのインデックス
        例外:
        IndexOutOfBoundsException - fromIndexが負の値の場合、toIndexが負の値の場合、あるいはfromIndextoIndexよりも大きい場合
        導入されたバージョン:
        1.4
      • set

        public void set​(int bitIndex)
        指定されたインデックスのビットをtrueに設定します。
        パラメータ:
        bitIndex - ビット・インデックス
        例外:
        IndexOutOfBoundsException - 指定されたインデックスが負の値の場合
        導入されたバージョン:
        1.0
      • set

        public void set​(int bitIndex,
                        boolean value)
        指定されたインデックスのビットを指定された値に設定します。
        パラメータ:
        bitIndex - ビット・インデックス
        value - 設定されるboolean値
        例外:
        IndexOutOfBoundsException - 指定されたインデックスが負の値の場合
        導入されたバージョン:
        1.4
      • set

        public void set​(int fromIndex,
                        int toIndex)
        指定されたfromIndex (これを含む)から指定されたtoIndex (これを含まない)までのビットをtrueに設定します。
        パラメータ:
        fromIndex - 設定する最初のビットのインデックス
        toIndex - 設定される最後のビットの後ろのインデックス
        例外:
        IndexOutOfBoundsException - fromIndexが負の値の場合、toIndexが負の値の場合、あるいはfromIndextoIndexよりも大きい場合
        導入されたバージョン:
        1.4
      • set

        public void set​(int fromIndex,
                        int toIndex,
                        boolean value)
        指定されたfromIndex (これを含む)から指定されたtoIndex (これを含まない)までのビットを指定された値に設定します。
        パラメータ:
        fromIndex - 設定する最初のビットのインデックス
        toIndex - 設定される最後のビットの後ろのインデックス
        value - 選択されたビットを設定する値
        例外:
        IndexOutOfBoundsException - fromIndexが負の値の場合、toIndexが負の値の場合、あるいはfromIndextoIndexよりも大きい場合
        導入されたバージョン:
        1.4
      • clear

        public void clear​(int bitIndex)
        インデックスで指定されたビットをfalseに設定します。
        パラメータ:
        bitIndex - クリアするビットのインデックス
        例外:
        IndexOutOfBoundsException - 指定されたインデックスが負の値の場合
        導入されたバージョン:
        1.0
      • clear

        public void clear​(int fromIndex,
                          int toIndex)
        指定されたfromIndex (これを含む)から指定されたtoIndex (これを含まない)までのビットをfalseに設定します。
        パラメータ:
        fromIndex - クリアする最初のビットのインデックス
        toIndex - クリアされる最後のビットの後ろのインデックス
        例外:
        IndexOutOfBoundsException - fromIndexが負の値の場合、toIndexが負の値の場合、あるいはfromIndextoIndexよりも大きい場合
        導入されたバージョン:
        1.4
      • clear

        public void clear()
        このBitSet内のビットをすべてfalseに設定します。
        導入されたバージョン:
        1.4
      • get

        public boolean get​(int bitIndex)
        指定されたインデックスを持つビットの値を返します。 このBitSetbitIndexのインデックスを持つビットが設定されている場合、値はtrueです。そうでない場合はfalseです。
        パラメータ:
        bitIndex - ビット・インデックス
        戻り値:
        指定されたインデックスを持つビットの値
        例外:
        IndexOutOfBoundsException - 指定されたインデックスが負の値の場合
      • get

        public BitSet get​(int fromIndex,
                          int toIndex)
        このBitSetからのビットで構成される新規BitSetfromIndex (これを含む)からtoIndex (これを含まない)まで返します。
        パラメータ:
        fromIndex - 組み込む最初のビットのインデックス
        toIndex - 組み込む最後のビットの後ろのインデックス
        戻り値:
        このBitSetの範囲からの新規BitSet
        例外:
        IndexOutOfBoundsException - fromIndexが負の値の場合、toIndexが負の値の場合、あるいはfromIndextoIndexよりも大きい場合
        導入されたバージョン:
        1.4
      • nextSetBit

        public int nextSetBit​(int fromIndex)
        指定された開始インデックス時、またはそのインデックス後に生じる、trueに設定された最初のビットのインデックスを返します。 該当するビットが存在しない場合は、-1が返されます。

        BitSet内のtrueビットに対して反復処理を実行する場合は、次のループを使用します。

         
         for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i+1)) {
             // operate on index i here
             if (i == Integer.MAX_VALUE) {
                 break; // or (i+1) would overflow
             }
         }

        パラメータ:
        fromIndex - チェックを開始する位置のインデックス(これを含む)
        戻り値:
        次のセット・ビットのインデックス。そのようなビットが存在しない場合は-1
        例外:
        IndexOutOfBoundsException - 指定されたインデックスが負の値の場合
        導入されたバージョン:
        1.4
      • nextClearBit

        public int nextClearBit​(int fromIndex)
        指定された開始インデックス時、またはそのインデックス後に生じる、falseに設定された最初のビットのインデックスを返します。
        パラメータ:
        fromIndex - チェックを開始する位置のインデックス(これを含む)
        戻り値:
        次のクリア・ビットのインデックス
        例外:
        IndexOutOfBoundsException - 指定されたインデックスが負の値の場合
        導入されたバージョン:
        1.4
      • previousSetBit

        public int previousSetBit​(int fromIndex)
        指定された開始インデックス時、またはそのインデックス前に生じる、trueに設定されたもっとも近いビットのインデックスを返します。 そのようなビットが存在しない場合、または開始インデックスとして-1が指定された場合は、-1が返されます。

        BitSet内のtrueビットに対して反復処理を実行する場合は、次のループを使用します。

         
         for (int i = bs.length(); (i = bs.previousSetBit(i-1)) >= 0; ) {
             // operate on index i here
         }

        パラメータ:
        fromIndex - チェックを開始する位置のインデックス(これを含む)
        戻り値:
        前のセット・ビットのインデックス。そのようなビットが存在しない場合は-1
        例外:
        IndexOutOfBoundsException - 指定されたインデックスが次より小さい場合-1
        導入されたバージョン:
        1.7
      • previousClearBit

        public int previousClearBit​(int fromIndex)
        指定された開始インデックス時、またはそのインデックス前に生じる、falseに設定されたもっとも近いビットのインデックスを返します。 そのようなビットが存在しない場合、または開始インデックスとして-1が指定された場合は、-1が返されます。
        パラメータ:
        fromIndex - チェックを開始する位置のインデックス(これを含む)
        戻り値:
        前のクリア・ビットのインデックス。そのようなビットが存在しない場合は-1
        例外:
        IndexOutOfBoundsException - 指定されたインデックスが次より小さい場合-1
        導入されたバージョン:
        1.7
      • length

        public int length()
        このBitSetの「論理サイズ」、つまりBitSetの最上位セット・ビットのインデックスに1を加えた値を返します。 BitSetにセット・ビットがない場合はゼロを返します。
        戻り値:
        BitSetの論理サイズ
        導入されたバージョン:
        1.2
      • isEmpty

        public boolean isEmpty()
        このBitSettrueに設定されたビットが含まれていない場合は、trueを返します。
        戻り値:
        このBitSetが空かどうかを示すboolean型
        導入されたバージョン:
        1.4
      • intersects

        public boolean intersects​(BitSet set)
        このBitSetでもtrueに設定された、true設定のビットが、指定されたBitSetにある場合、trueを返します。
        パラメータ:
        set - 交差するBitSet
        戻り値:
        このBitSetが指定されたBitSetと交差するかどうかを示すboolean型
        導入されたバージョン:
        1.4
      • cardinality

        public int cardinality()
        このBitSetで、trueに設定されたビットの数を返します。
        戻り値:
        このBitSetで、trueに設定されたビットの数
        導入されたバージョン:
        1.4
      • and

        public void and​(BitSet set)
        ターゲット・ビット・セットと引数ビット・セットの論理積を取ります。 このビット・セットの各ビットの初期値がtrueで、ビット・セット引数の対応するビットの初期値もtrueの場合にかぎり、このビット・セットが変更され、その各ビットの値がtrueになります。
        パラメータ:
        set - ビット・セット
      • or

        public void or​(BitSet set)
        ビット・セットとビット・セット引数の論理和を取ります。 このビット・セットのビットの値がtrueであったか、ビット・セット引数の対応するビットの値がtrueである場合にかぎり、このビット・セットが変更され、そのビットの値がtrueになります。
        パラメータ:
        set - ビット・セット
      • xor

        public void xor​(BitSet set)
        ビット・セットとビット・セット引数の排他的論理和を取ります。 次のいずれかの条件が成り立つ場合にかぎり、このビット・セットが変更され、そのビットの値がtrueになります。
        • このビットの初期値がtrueで、引数の対応するビットの値がfalseである。
        • このビットの初期値がfalseで、引数の対応するビットの値がtrueである。
        パラメータ:
        set - ビット・セット
      • andNot

        public void andNot​(BitSet set)
        対応するビットが、指定されたBitSet内に設定されているこのBitSet内のすべてのビットをクリアします。
        パラメータ:
        set - このBitSetをマスクするためのBitSet
        導入されたバージョン:
        1.2
      • hashCode

        public int hashCode()
        このビット・セットのハッシュ・コード値を返します。 ハッシュ・コードは、このBitSet内に設定されているビットによってのみ決まります。

        ハッシュ・コードは、次の計算の結果として定義されます。

         
         public int hashCode() {
             long h = 1234;
             long[] words = toLongArray();
             for (int i = words.length; --i >= 0; )
                 h ^= words[i] * (i + 1);
             return (int)((h >> 32) ^ h);
         }
        ビットの設定が変わると、ハッシュ・コードは変更されます。

        オーバーライド:
        hashCode、クラスObject
        戻り値:
        このビット・セットのハッシュ・コード値
        関連項目:
        Object.equals(java.lang.Object), System.identityHashCode(java.lang.Object)
      • size

        public int size()
        このBitSetでビット値を表すために実際に使用しているビットの数を返します。 このセットで最大の要素は「サイズ」で、これが第1の要素です。
        戻り値:
        ビット・セットに現在あるビットの数
      • equals

        public boolean equals​(Object obj)
        このオブジェクトと指定されたオブジェクトを比較します。 引数がnullではなく、このビット・セットとまったく同じtrueのビットのセットを持つBitsetオブジェクトである場合にかぎり、結果はtrueです。 つまり、負でないint型のインデックスkに対して、
        ((BitSet)obj).get(k) == this.get(k)
        が成り立たなければいけません。 2つのビット・セットの現在のサイズは比較されません。
        オーバーライド:
        equals、クラスObject
        パラメータ:
        obj - 比較対象のオブジェクト
        戻り値:
        オブジェクトが同じである場合はtrue、それ以外の場合はfalse
        関連項目:
        size()
      • clone

        public Object clone()
        このBitSetをクローニングして、それと同等の新しいBitSetを作成します。 このビット・セットの複製は、このビット・セットとまったく同じtrueのビットを持ちます。
        オーバーライド:
        clone、クラスObject
        戻り値:
        このビット・セットの複製
        関連項目:
        size()
      • toString

        public String toString()
        ビット・セットの文字列表現を返します。 このBitSetでビットが設定状態で保持されているインデックスごとに、そのインデックスの10進表現が結果に含まれます。 こうしたインデックスは、最下位から最上位の順序で並べられ、「, 」(カンマとスペース)で区切って中カッコで囲まれます。このため、整数セットの通常の数値表記になります。

        例:

         BitSet drPepper = new BitSet();
        これで、drPepper.toString()は「{}」を返します。
         drPepper.set(2);
        これで、drPepper.toString()は「{2}」を返します。
         drPepper.set(4);
         drPepper.set(10);
        これで、drPepper.toString()は「{2, 4, 10}」を返します。

        オーバーライド:
        toString、クラスObject
        戻り値:
        このビット・セットの文字列表現
      • stream

        public IntStream stream()
        このBitSetにビットが設定状態で保持されているインデックスのストリームを返します。 インデックスは、最下位から最上位の順序で返されます。 そのストリームのサイズは、設定状態にあるビットの数であり、cardinality()メソッドで返される値に等しくなります。

        ストリームは、ターミナル・ストリーム操作が開始されるときにこのビット・セットにバインドされます((具体的には、ストリームのスプライテータはlate-binding))。 その操作中にビット・セットが変更された場合、結果は未定義です。

        戻り値:
        設定されたインデックスを表す整数のストリーム
        導入されたバージョン:
        1.8