Module  java.base
软件包  java.util

Class BitSet

  • All Implemented Interfaces:
    SerializableCloneable


    public class BitSet
    extends Object
    implements Cloneable, Serializable
    该类实现了根据需要增长的位向量。 位组的每个组件都有一个boolean值。 BitSet的位由非负整数索引。 可以检查,设置或清除各个索引位。 一个BitSet可以用于通过逻辑AND,逻辑包括OR和逻辑异或操作来修改另一个BitSet的内容。

    默认情况下,集合中的所有位最初都具有值false

    每个位集具有当前大小,这是位设置当前使用的空间位数。 请注意,这个大小与一个位的实现有关,所以它可能会随着实现而改变。 位集合的长度与位集合的逻辑长度相关,并且独立于实现来定义。

    除非另有说明,否则将null参数传递给BitSet任何方法将导致NullPointerException

    A BitSet对于无需外部同步的多线程使用是不安全的。

    从以下版本开始:
    1.0
    另请参见:
    Serialized Form
    • 构造方法摘要

      构造方法  
      Constructor 描述
      BitSet​()
      创建一个新的位集。
      BitSet​(int nbits)
      创建一个位集合,其初始大小足够大以显式表示索引为 0nbits-1
    • 方法摘要

      所有方法  静态方法  接口方法  具体的方法 
      Modifier and Type 方法 描述
      void and​(BitSet set)
      执行此参数位置位的此目标位设置的逻辑 AND
      void andNot​(BitSet set)
      清除 BitSet的所有位,其相应位在指定的 BitSet设置。
      int cardinality​()
      返回 true中设置为 trueBitSet
      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)
      如果指定,则返回true BitSet具有设置为任何位 true ,它们也设置为 true这个 BitSet
      boolean isEmpty​()
      如果此 BitSet包含设置为 true位,则返回true。
      int length​()
      返回 BitSet的“逻辑大小”: BitSet加上最高位的索引。
      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​()
      返回一个包含该位集合中所有位的新长数组。
      String toString​()
      返回此位集的字符串表示形式。
      static BitSet valueOf​(byte[] bytes)
      返回包含给定字节数组中所有位的新位集合。
      static BitSet valueOf​(long[] longs)
      返回包含给定长数组中所有位的新位集。
      static BitSet valueOf​(ByteBuffer bb)
      返回一个包含给定字节缓冲区中所有位在其位置和极限之间的新位集合。
      static BitSet valueOf​(LongBuffer lb)
      返回包含给定长缓冲区中其位置和极限之间的所有位的新位集合。
      void xor​(BitSet set)
      使用位设置参数执行该位的逻辑 异或
    • 构造方法详细信息

      • BitSet

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

        public BitSet​(int nbits)
        创建一个位集合,其初始大小足够大,以明确表示索引为0nbits-1 所有位最初为false
        参数
        nbits - 位的初始大小
        异常
        NegativeArraySizeException - 如果指定的初始大小为负
    • 方法详细信息

      • valueOf

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

        更确切地说,
        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 - 一个长缓冲区,包含位置和限制之间的位序列的小 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 - 一个字节数组,其中包含要用作新位集初始位的位序列的小 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 - 一个字节缓冲区,其中包含位置和极限之间的位序列的小 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[] 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 - 要设置的布尔值
        异常
        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)
        返回具有指定索引的位的值。 该值是true如果与索引的比特bitIndex在该当前设置BitSet ; 否则,结果是false
        参数
        bitIndex - 位索引
        结果
        该位的值与指定的索引
        异常
        IndexOutOfBoundsException - 指定的索引是否为负
      • get

        public BitSet get​(int fromIndex,
                          int toIndex)
        返回一个新的 BitSetBitSetfromIndex (含)到 toIndex (排他)组成。
        参数
        fromIndex - 要包含的第一位的索引
        toIndex - 索引后最后一位要包含
        结果
        一个新的 BitSet从这个 BitSet的范围
        异常
        IndexOutOfBoundsException - 如果 fromIndex为负数,或 toIndex为负数,或 fromIndex大于 toIndex
        从以下版本开始:
        1.4
      • nextSetBit

        public int nextSetBit​(int fromIndex)
        返回在指定的起始索引上或之后发生的第一个位的索引,设置为true 如果没有这样的位存在,则返回-1

        遍历true位在BitSet ,使用以下循环:

           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

        遍历true位在BitSet ,使用以下循环:

           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是否为空
        从以下版本开始:
        1.4
      • intersects

        public boolean intersects​(BitSet set)
        如果指定,则返回true BitSet具有设置为任何位 true ,它们也设置为 true这个 BitSet
        参数
        set - BitSet相交
        结果
        指示此 BitSet是否与指定的 BitSet相交
        从以下版本开始:
        1.4
      • cardinality

        public int cardinality​()
        返回此 BitSet设置为 trueBitSet
        结果
        这个 true中的位数设置为 BitSet
        从以下版本开始:
        1.4
      • and

        public void and​(BitSet set)
        执行此参数位置位的此目标位设置的逻辑AND 该位组被修改,使得在它的每个位具有值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); } 
        请注意,如果该组位被改变,那么哈希代码就会改变。
        重写:
        hashCodeObject
        结果
        该位的哈希码值设置
        另请参见:
        Object.equals(java.lang.Object)System.identityHashCode(java.lang.Object)
      • size

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

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

        public Object clone​()
        克隆BitSet产生一个新的BitSet ,等于它。 该位的克隆是另一个位设置,与该位设置完全相同的位设置为true
        重写:
        cloneObject
        结果
        这个位的一个克隆
        另请参见:
        size()
      • 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} ”。
        重写:
        toStringObject
        结果
        该位集合的字符串表示形式
      • stream

        public IntStream stream​()
        返回此BitSet包含设置状态位的索引流。 索引按顺序返回,从最低到最高。 流的大小是设置状态中的位数,等于cardinality()方法返回的值。

        当终端流操作开始时(特别地,流的分流器是late-binding ),该流绑定到该位集合。 如果在该操作期间修改了位集,则结果未定义。

        结果
        表示集合索引的整数流
        从以下版本开始:
        1.8