模块 java.base
 java.util

类 BitSet

java.lang.Object
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(int nbits)
    创建一个位集,其初始大小足以显式表示索引在 0nbits-1 范围内的位。
  • 方法总结

    修饰符和类型
    方法
    描述
    void
    and(BitSet set)
    执行逻辑AND该目标位设置为参数位设置。
    void
    andNot(BitSet set)
    清除此 BitSet 中的所有位,其对应位已在指定的 BitSet 中设置。
    int
    返回此 BitSet 中设置为 true 的位数。
    void
    将此 BitSet 中的所有位设置为 false
    void
    clear(int bitIndex)
    将索引指定的位设置为 false
    void
    clear(int fromIndex, int toIndex)
    设置从指定的 fromIndex(含)到指定的 toIndex(不含)到 false 的位。
    克隆这个 BitSet 会产生一个与其相等的新 BitSet
    boolean
    equals(Object obj)
    将此对象与指定对象进行比较。
    void
    flip(int bitIndex)
    将指定索引处的位设置为其当前值的补码。
    void
    flip(int fromIndex, int toIndex)
    将指定的 fromIndex(含)到指定的 toIndex(不含)的每一位设置为其当前值的补码。
    boolean
    get(int bitIndex)
    返回具有指定索引的位的值。
    get(int fromIndex, int toIndex)
    返回一个新的 BitSet 由这个 BitSetfromIndex(包括)到 toIndex(不包括)的位组成。
    int
    返回此位集的哈希码值。
    boolean
    如果指定的 BitSet 有任何位设置为 true,并且在此 BitSet 中也设置为 true,则返回真。
    boolean
    如果此 BitSet 不包含设置为 true 的位,则返回 true。
    int
    返回此 BitSet 的“逻辑大小”:BitSet 中最高设置位的索引加一。
    int
    nextClearBit(int fromIndex)
    返回在指定起始索引上或之后出现的设置为 false 的第一个位的索引。
    int
    nextSetBit(int fromIndex)
    返回在指定起始索引上或之后出现的设置为 true 的第一个位的索引。
    void
    or(BitSet set)
    执行逻辑OR该位与位设置参数一起设置。
    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 实际使用的空间位数,以表示位值。
    返回一个索引流,其中 BitSet 包含一个处于设置状态的位。
    byte[]
    返回一个新的字节数组,其中包含此位集中的所有位。
    long[]
    返回一个新的 long 数组,其中包含此位集中的所有位。
    返回此位集的字符串表示形式。
    static BitSet
    valueOf(byte[] bytes)
    返回包含给定字节数组中所有位的新位集。
    static BitSet
    valueOf(long[] longs)
    返回包含给定 long 数组中所有位的新位集。
    static BitSet
    返回一个新的位集,其中包含给定字节缓冲区中其位置和限制之间的所有位。
    static BitSet
    返回一个新的位集,其中包含给定长缓冲区中其位置和限制之间的所有位。
    void
    xor(BitSet set)
    执行逻辑XOR该位与位设置参数一起设置。

    在类 java.lang.Object 中声明的方法

    finalize, getClass, notify, notifyAll, wait, wait, wait
  • 构造方法详细信息

    • BitSet

      public BitSet()
      创建一个新的位集。所有位最初都是 false
    • BitSet

      public BitSet(int nbits)
      创建一个位集,其初始大小足以显式表示索引在 0nbits-1 范围内的位。所有位最初都是 false
      参数:
      nbits - 位集的初始大小
      抛出:
      NegativeArraySizeException - 如果指定的初始大小为负
  • 方法详情

    • valueOf

      public static BitSet  valueOf(long[] longs)
      返回包含给定 long 数组中所有位的新位集。

      更确切地说,
      BitSet.valueOf(longs).get(n) == ((longs[n/64] & (1L<<(n%64))) != 0)
      对于所有 n < 64 * longs.length

      此方法等效于 BitSet.valueOf(LongBuffer.wrap(longs))

      参数:
      longs - 一个长数组,包含一个位序列的小端表示,用作新位集的初始位
      返回:
      一个 BitSet 包含长数组中的所有位
      自从:
      1.7
    • valueOf

      public static BitSet  valueOf(LongBuffer  lb)
      返回一个新的位集,其中包含给定长缓冲区中其位置和限制之间的所有位。

      更确切地说,
      BitSet.valueOf(lb).get(n) == ((lb.get(lb.position()+n/64) & (1L<<(n%64))) != 0)
      对于所有 n < 64 * lb.remaining()

      此方法不修改长缓冲区,并且位集不保留对缓冲区的引用。

      参数:
      lb - 一个长缓冲区,包含其位置和限制之间的位序列的小端表示,用作新位集的初始位
      返回:
      一个 BitSet 包含缓冲区中指定范围内的所有位
      自从:
      1.7
    • valueOf

      public static BitSet  valueOf(byte[] bytes)
      返回包含给定字节数组中所有位的新位集。

      更确切地说,
      BitSet.valueOf(bytes).get(n) == ((bytes[n/8] & (1<<(n%8))) != 0)
      对于所有 n < 8 * bytes.length

      此方法等效于 BitSet.valueOf(ByteBuffer.wrap(bytes))

      参数:
      bytes - 一个字节数组,包含一个位序列的小端表示,用作新位集的初始位
      返回:
      一个 BitSet 包含字节数组中的所有位
      自从:
      1.7
    • valueOf

      public static BitSet  valueOf(ByteBuffer  bb)
      返回一个新的位集,其中包含给定字节缓冲区中其位置和限制之间的所有位。

      更确切地说,
      BitSet.valueOf(bb).get(n) == ((bb.get(bb.position()+n/8) & (1<<(n%8))) != 0)
      对于所有 n < 8 * bb.remaining()

      此方法不修改字节缓冲区,并且位集不保留对缓冲区的引用。

      参数:
      bb - 一个字节缓冲区,包含其位置和限制之间的位序列的小端表示,用作新位集的初始位
      返回:
      一个 BitSet 包含缓冲区中指定范围内的所有位
      自从:
      1.7
    • toByteArray

      public byte[] toByteArray()
      返回一个新的字节数组,其中包含此位集中的所有位。

      更准确地说,如果
      byte[] bytes = s.toByteArray();
      然后bytes.length == (s.length()+7)/8
      s.get(n) == ((bytes[n/8] & (1<<(n%8))) != 0)
      对于所有 n < 8 * bytes.length

      返回:
      包含此位集中所有位的小端表示的字节数组
      自从:
      1.7
    • toLongArray

      public long[] toLongArray()
      返回一个新的 long 数组,其中包含此位集中的所有位。

      更准确地说,如果
      long[] longs = s.toLongArray();
      然后longs.length == (s.length()+63)/64
      s.get(n) == ((longs[n/64] & (1L<<(n%64))) != 0)
      对于所有 n < 64 * longs.length

      返回:
      包含此位集中所有位的小端表示的长数组
      自从:
      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 为负,或 fromIndex 大于 toIndex
      自从:
      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 为负,或 fromIndex 大于 toIndex
      自从:
      1.4
    • set

      public void set(int fromIndex, int toIndex, boolean value)
      将指定 fromIndex(含)到指定 toIndex(不含)的位设置为指定值。
      参数:
      fromIndex - 要设置的第一个位的索引
      toIndex - 要设置的最后一位之后的索引
      value - 将所选位设置为的值
      抛出:
      IndexOutOfBoundsException - 如果 fromIndex 为负,或 toIndex 为负,或 fromIndex 大于 toIndex
      自从:
      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 为负,或 fromIndex 大于 toIndex
      自从:
      1.4
    • clear

      public void clear()
      将此 BitSet 中的所有位设置为 false
      自从:
      1.4
    • get

      public boolean get(int bitIndex)
      返回具有指定索引的位的值。如果索引为bitIndex的位当前在此BitSet中设置,则值为true;否则,结果为 false
      参数:
      bitIndex - 位索引
      返回:
      具有指定索引的位的值
      抛出:
      IndexOutOfBoundsException - 如果指定索引为负
    • get

      public BitSet  get(int fromIndex, int toIndex)
      返回一个新的 BitSet 由这个 BitSetfromIndex(包括)到 toIndex(不包括)的位组成。
      参数:
      fromIndex - 要包含的第一位的索引
      toIndex - 要包含的最后一位之后的索引
      返回:
      来自这个 BitSet 范围的新 BitSet
      抛出:
      IndexOutOfBoundsException - 如果 fromIndex 为负,或 toIndex 为负,或 fromIndex 大于 toIndex
      自从:
      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 中最高设置位的索引加一。如果 BitSet 不包含设置位,则返回零。
      返回:
      这个 BitSet 的逻辑大小
      自从:
      1.2
    • isEmpty

      public boolean isEmpty()
      如果此 BitSet 不包含设置为 true 的位,则返回 true。
      返回:
      指示此 BitSet 是否为空的boolean
      自从:
      1.4
    • intersects

      public boolean intersects(BitSet  set)
      如果指定的 BitSet 有任何位设置为 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)
      执行逻辑AND该目标位设置为参数位设置。此位集被修改,以便其中的每个位都具有值 true 当且仅当它最初都具有值 true 并且位集参数中的相应位也具有值 true
      参数:
      set - 有点设置
    • or

      public void or(BitSet  set)
      执行逻辑OR该位与位设置参数一起设置。此位集被修改,当且仅当它已经具有值 true 或位集参数中的相应位具有值 true 时,其中的位才具有值 true
      参数:
      set - 有点设置
    • xor

      public void xor(BitSet  set)
      执行逻辑XOR该位与位设置参数一起设置。当且仅当以下语句之一成立时,该位集被修改,以便其中的位具有值 true
      • 该位最初的值为 true ,参数中对应的位的值为 false
      • 该位最初的值为 false ,参数中对应的位的值为 true
      参数:
      set - 有点设置
    • andNot

      public void andNot(BitSet  set)
      清除此 BitSet 中的所有位,其对应位已在指定的 BitSet 中设置。
      参数:
      set - 用来屏蔽这个 BitSetBitSet
      自从:
      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
      返回:
      此位集的哈希码值
      参见:
    • size

      public int size()
      返回此 BitSet 实际使用的空间位数,以表示位值。集合中的最大元素是 size - 第一个元素。
      返回:
      此位集中当前的位数
    • equals

      public boolean equals(Object  obj)
      将此对象与指定对象进行比较。结果是 true 当且仅当参数不是 null 并且是一个 BitSet 对象,其设置为 true 的位集与此位集完全相同。也就是说,对于每个非负 int 索引 k
      ((BitSet)obj).get(k) == this.get(k)
      必须为真。不比较两个位集的当前大小。
      重写:
      equals 在类 Object
      参数:
      obj - 要与之比较的对象
      返回:
      true 如果对象相同; false否则
      参见:
    • clone

      public Object  clone()
      克隆这个 BitSet 会产生一个与其相等的新 BitSet。位集的克隆是另一个位集,它具有与此位集完全相同的设置为true的位。
      重写:
      clone 在类 Object
      返回:
      这个位集的克隆
      参见:
    • toString

      public String  toString()
      返回此位集的字符串表示形式。对于此 BitSet 包含处于设置状态的位的每个索引,该索引的十进制表示形式包含在结果中。此类索引按从低到高的顺序列出,以“,”(一个逗号和一个空格)分隔并用大括号括起来,从而形成一组整数的常用数学符号。

      示例:

       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