Java - BitSet类


Java - BitSet类

BitSet类创建一个包含位值的特殊类型的数组。BitSet数组可以根据需要增加大小。这使它类似于位向量。这是一个遗留类,但它已在Java 2 1.4版中完全重新设计。

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

Sr.No. 构造函数和描述
1

BitSet()

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

2

BitSet(int size)

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

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

Sr.No. 方法和描述
1

void and(BitSet bitSet)

使用bitSet指定的内容调用BitSet对象的内容。结果放入调用对象。

2

void andNot(BitSet bitSet)

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

3

int cardinality()

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

4

void clear()

所有位都归零。

5

void clear(int 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)

反转索引指定的位。

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)

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

19

void or(BitSet bitSet)

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

20

void set(int 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对象的内容。结果放入调用对象。

实例

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

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