模块  java.base
软件包  java.util

Class BitSet

  • 实现的所有接口
    SerializableCloneable

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

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

    每个位集都有一个当前大小,即当前位集使用的空间位数。 请注意,大小与位集的实现有关,因此它可能随实现而改变。 位集的长度与位集的逻辑长度有关,并且与实现无关地定义。

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

    如果没有外部同步,多线程使用BitSet是不安全的。

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

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

      所有方法  静态方法  实例方法 具体的方法 
      变量和类型 方法 描述
      void and​(BitSet set)
      使用参数位设置执行此目标位设置的逻辑 AND
      void andNot​(BitSet set)
      清除此 BitSet的所有位,其相应位在指定的 BitSet设置。
      int cardinality()
      返回此 BitSet设置为 trueBitSet
      void clear()
      将此BitSet中的所有位设置为 false
      void clear​(int bitIndex)
      将索引指定的位设置为 false
      void clear​(int fromIndex, int toIndex)
      将指定的 fromIndex (含)到指定的 toIndex (不包括)的位设置为 false
      Object clone()
      克隆此 BitSet会生成一个 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)
      返回一个新的 BitSetBitSetfromIndex (含)到 toIndex (独家)的位组成。
      int hashCode()
      返回此位集的哈希码值。
      boolean intersects​(BitSet set)
      如果指定的 BitSet任何位设置为 true true在此 BitSet中也设置为 true ,则返回true。
      boolean isEmpty()
      如果此 BitSet包含设置为 true位,则返回true。
      int length()
      返回此 BitSet的“逻辑大小”: BitSet中最高设置位的 BitSet加1。
      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实际使用的空间位数,以表示位值。
      IntStream stream()
      返回此 BitSet包含处于set状态的位的索引流。
      byte[] toByteArray()
      返回包含此位集中所有位的新字节数组。
      long[] toLongArray()
      返回包含此位集中所有位的新长数组。
      String toString()
      返回此位集的字符串表示形式。
      static BitSet valueOf​(byte[] bytes)
      返回包含给定字节数组中所有位的新位集。
      static BitSet valueOf​(long[] longs)
      返回包含给定long数组中所有位的新位集。
      static BitSet valueOf​(ByteBuffer bb)
      返回一个新的位集,其中包含位置和限制之间给定字节缓冲区中的所有位。
      static BitSet valueOf​(LongBuffer lb)
      返回一个新的位集,其中包含位置和限制之间给定长缓冲区中的所有位。
      void xor​(BitSet set)
      使用位设置参数执行此位设置的逻辑 XOR
    • 构造方法详细信息

      • 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[] 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加1。 如果BitSet包含设置位,则返回零。
        结果
        这个 BitSet的逻辑大小
        从以下版本开始:
        1.2
      • isEmpty

        public boolean isEmpty()
        如果此 BitSet包含设置为 true位,则返回true。
        结果
        boolean指示此 BitSet是否为空
        从以下版本开始:
        1.4
      • intersects

        public boolean intersects​(BitSet set)
        如果指定的 BitSet任何位设置为 true ,并且在此 BitSet中也设置为 true ,则返回true。
        参数
        set - BitSet与...相交
        结果
        boolean指示此 BitSet是否与指定的 BitSet相交
        从以下版本开始:
        1.4
      • cardinality

        public int cardinality()
        返回此 BitSet设置为 trueBitSet
        结果
        比特设置为数量 trueBitSet
        从以下版本开始:
        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 -该 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实际使用的空间位数,以表示位值。 集合中的最大元素是size - 1st元素。
        结果
        此位设置中当前的位数
      • equals

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

        public Object clone()
        克隆此BitSet会生成一个BitSet相等的新BitSet 位集的克隆是另一个位集,其位设置与此位设置为true完全相同。
        重写:
        clone在课程 Object
        结果
        这个位集的克隆
        另请参见:
        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} ”。
        重写:
        toString在课程 Object
        结果
        此位集的字符串表示形式
      • stream

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

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

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