BitSet
类可用来创建一个包含位值的特殊类型的数组。 BitSet
数组可以根据需要增加大小。 这使它类似于位向量。 这是一个遗留类,但它已在Java 2 1.4
版中完全重新设计。
BitSet
类定义了以下两个构造函数。
编号 | 构造函数 | 说明 |
---|---|---|
1 | BitSet() |
此构造函数创建一个默认对象。 |
2 | BitSet(int size) |
此构造函数可指定其初始大小,即它可以容纳的位数。 所有位都初始化为零。 |
BitSet
类实现Cloneable
接口并定义下表中列出的方法 -
编号 | 方法 | 说明 |
---|---|---|
1 | void and(BitSet bitSet) |
使用bitSet 指定的内容调用BitSet 对象的内容,结果放入调用对象。 |
2 | void andNot(BitSet bitSet) |
对于bitSet 中的每个1 位,相应位设置为0 。 |
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) |
返回一个由startIndex 和endIndex 中的位组成的BitSet 对象,调用对象不会更改。 |
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 对象的内容。 结果放入调用对象。 |
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 对象的等效字符串。 |
25 | 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:
{}