位置:首页 > Java技术 > Java基础教程 > Java BitSet类

Java BitSet类

BitSet 类创建一个特殊类型的数组保存位值。该BitSet中数组的大小可以根据需要增加。这使得它类似于比特的向量。

这是一个传统类,但它已被完全重新设计在Java 2,1.4版本。

BitSet 定义了两个构造函数。第一个版本创建一个默认的对象:

BitSet( )

Java2 版本允许指定它的初始大小,即比特,它可以容纳的数量。所有位初始化为零。

BitSet(int size)

BitSet中实现了Cloneable接口,并定义在表中列出的方法:

SN Methods with 描述
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)
index指定的位清零。
6 void clear(int startIndex, int endIndex)
将从startIndex到endIndex清零。
7 Object clone( )
重复调用BitSet中对象。
8 boolean equals(Object bitSet)
返回true如果调用位设置相当于一个在bitSet通过。否则,该方法返回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.1。调用对象不被改变。
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)
OR值调用的内容BitSet中对象,通过BitSet指定。结果被放置到调用对象。 
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.1。
23 void set(int startIndex, int endIndex, boolean v)
设置位从startIndex到endIndex.1,在真正传递的值v设置位,清除位为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("
Initial pattern in bits2: ");
     System.out.println(bits2);

     // AND bits
     bits2.and(bits1);
     System.out.println("
bits2 AND bits1: ");
     System.out.println(bits2);

     // OR bits
     bits2.or(bits1);
     System.out.println("
bits2 OR bits1: ");
     System.out.println(bits2);

     // XOR bits
     bits2.xor(bits1);
     System.out.println("
bits2 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:
{}