Java BitSet 类



简介

Java BitSet 类创建了一种特殊的数组,用于保存位值。BitSet 数组可以根据需要增加大小。这使其类似于位向量。这是一个遗留类,但在 Java 2 版本 1.4 中进行了完全重新设计。

Java BitSet 类实现了一个根据需要增长的位向量。以下是关于 BitSet 的重要要点:

  • 如果没有外部同步,BitSet 不适用于多线程使用。

  • 集合中的所有位最初都具有 false 值。

  • 向 BitSet 中任何方法传递 null 参数将导致 NullPointerException。

类声明

以下是java.util.BitSet 类的声明:

public class BitSet
   extends Object
   implements Cloneable, Serializable

类构造函数

序号 构造函数 & 描述
1

BitSet()

此构造函数创建一个新的位集。

2

BitSet(int nbits)

此构造函数创建一个位集,其初始大小足以显式表示索引范围在 0 到 nbits-1 之间的位。

类方法

序号 方法 & 描述
1 void and(BitSet set)

此方法执行此目标位集与参数位集的逻辑 AND。

2 void andNot(BitSet set)

此方法清除此 BitSet 中所有在指定 BitSet 中对应的位被设置的位。

3 int cardinality()

此方法返回此 BitSet 中设置为 true 的位的数量。

4 void clear()

此方法将此 BitSet 中的所有位设置为 false。

5 Object clone()

此方法克隆此 BitSet 并生成一个与其相等的新 BitSet。

6 boolean equals(Object obj)

此方法将此对象与指定对象进行比较。

7 void flip(int bitIndex)

此方法将指定索引处的位设置为其当前值的补码。

8 boolean get(int bitIndex)

此方法返回具有指定索引的位的value。

9 int hashCode()

此方法返回具有指定索引的位的value。

10 boolean intersects(BitSet set)

如果指定 BitSet 中有任何位设置为 true,并且在 此 BitSet 中也设置为 true,则此方法返回 true。

11 boolean isEmpty()

如果此 BitSet 不包含任何设置为 true 的位,则此方法返回 true。

12 int length()

此方法返回此 BitSet 的“逻辑大小”:BitSet 中最高设置位的索引加 1。

13 int nextClearBit(int fromIndex)

此方法返回在指定起始索引或之后出现的第一个设置为 false 的位的索引。

14 int nextSetBit(int fromIndex)

此方法返回在指定起始索引或之后出现的第一个设置为 true 的位的索引。

15 void or(BitSet set)

此方法执行此位集与位集参数的逻辑 OR。

16 int previousClearBit(int fromIndex)

此方法返回在指定起始索引或之前出现的第一个设置为 false 的位的索引。

17 int previousSetBit(int fromIndex)

此方法返回在指定起始索引或之后出现的第一个设置为 true 的位的索引。

18 void set(int bitIndex)

此方法将指定索引处的位设置为 true。

19 int size()

此方法返回此 BitSet 实际用于表示位值的位数。

20 IntStream stream()

此方法返回一个索引流,对于这些索引,此 BitSet 包含一个处于设置状态的位。

21 byte[] toByteArray()

此方法返回一个新的位集,其中包含给定字节数组中的所有位。

22 long[] toLongArray()

此方法返回一个新的长整型数组,其中包含此位集中的所有位。

23 String toString()

此方法返回此位集的字符串表示形式。

24 static BitSet valueOf​(byte[] bytes)

此方法返回一个新的位集,其中包含给定字节数组中的所有位。

25 void xor(BitSet set)

此方法执行此位集与位集参数的逻辑 XOR。

继承的方法

此类继承自以下类:

  • java.util.Object

创建 BitSet 并对 BitSet 执行操作的示例

以下程序说明了 BitSet 数据结构支持的几种方法:

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:
{}
广告