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