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指定的内容进行AND运算。结果被放置到调用的对象中。 |
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) 返回一个由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。 |
19 | void or(BitSet bitSet) 将调用的 BitSet 对象与指定的 bitSet 执行按位或运算。结果存入调用对象。 |
20 | void set(int index) 设置指定索引处的位。 |
21 | void set(int index, boolean v) 将指定索引处的位设置为传入的值v。如果v为true,则设置该位为1,否则清除该位。 |
22 | void set(int startIndex, int endIndex) 将从startIndex到endIndex的位设置为1。 |
23 | void set(int startIndex, int endIndex, boolean v) 将从startIndex到endIndex的位设置为传入的值v。如果v为true,则设置这些位为1,否则清除这些位。 |
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:
{}