• Java 数据结构教程

Java 数据结构 - Bitset 类



BitSet 类创建一个特殊类型的数组,用于保存位值。它可以根据需要增加大小,这使得它类似于位向量。BitSet 的索引由非负值表示,每个索引都保存一个布尔值。

Java 中的 BitSet 类

BitSet 类实现了一组位或标志,可以单独设置和清除。当您需要跟踪一组布尔值时,此类非常有用;您只需为每个值分配一个位,并根据需要设置或清除它。BitSet 数组可以根据需要增加大小。这使得它类似于位向量。

BitSet 定义了以下两个构造函数。

序号 构造函数和描述
1

BitSet( )

此构造函数创建一个默认对象。

2

BitSet(int size)

此构造函数允许您指定其初始大小,即它可以容纳的位数。所有位都初始化为零。

BitSet 实现 Cloneable 接口并定义下表中列出的方法

序号 方法和描述
1

void and(BitSet bitSet)

将调用 BitSet 对象的内容与 bitSet 指定的内容进行 AND 运算。结果将放入调用对象中。

2

void andNot(BitSet bitSet)

对于 bitSet 中的每个 1 位,调用 BitSet 中的对应位将被清除。

3

int cardinality( )

返回调用对象中已设置位的数量。

4

void clear( )

将所有位清零。

5

void clear(int index)

将 index 指定的位清零。

6

void clear(int startIndex, int endIndex)

将 startIndex 到 endIndex 之间的位清零。

7

Object clone( )

复制调用 BitSet 对象。

8

boolean equals(Object bitSet)

如果调用位集等效于 bitSet 中传递的位集,则返回 true。否则,该方法返回 false。

9

void flip(int index)

反转 index 指定的位。

10

void flip(int startIndex, int endIndex)

反转 startIndex 到 endIndex 之间的位。

11

boolean get(int index)

返回指定索引处位的当前状态。

12

BitSet get(int startIndex, int endIndex)

返回一个 BitSet,其中包含从 startIndex 到 endIndex 的位。调用对象不会更改。

13

int hashCode( )

返回调用对象的哈希码。

14

boolean intersects(BitSet bitSet)

如果调用对象和 bitSet 中至少有一对对应位为 1,则返回 true。

15

boolean isEmpty( )

如果调用对象中的所有位都为零,则返回 true。

16

int length( )

返回保存调用 BitSet 内容所需的位数。此值由最后一个 1 位的位置确定。

17

int nextClearBit(int startIndex)

返回下一个清除位(即下一个零位)的索引,从 startIndex 指定的索引开始。

18

int nextSetBit(int startIndex)

返回下一个设置位(即下一个 1 位)的索引,从 startIndex 指定的索引开始。如果没有设置位,则返回 -1。

19

void or(BitSet bitSet)

将调用 BitSet 对象的内容与 bitSet 指定的内容进行 OR 运算。结果将放入调用对象中。

20

void set(int index)

设置 index 指定的位。

21

void set(int index, boolean v)

将 index 指定的位设置为 v 中传递的值。True 设置位,False 清除位。

22

void set(int startIndex, int endIndex)

设置 startIndex 到 endIndex 之间的位。

23

void set(int startIndex, int endIndex, boolean v)

将 startIndex 到 endIndex 之间的位设置为 v 中传递的值。True 设置位,False 清除位。

24

int size( )

返回调用 BitSet 对象中的位数。

25

String toString( )

返回调用 BitSet 对象的字符串等效项。

26

void xor(BitSet bitSet)

将调用 BitSet 对象的内容与 bitSet 指定的内容进行 XOR 运算。结果将放入调用对象中。

示例

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

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("\n Initial 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:
{}
广告