Bitset
类创建一种特殊类型的数组来保存位值。BitSet
的数组大小会随需要增加,这和位向量
(vector of bits
)类似。它是一个传统的类,但在Java 2
中被完全重新设计。
BitSet
定义了两个构造方法,第一个构造方法创建一个默认的对象:
BitSet()
第二个方法允许用户指定初始大小,所有位初始化为0
:
BitSet(int size)
BitSet
实现了Cloneable
接口中定义的方法:
void and(BitSet set)
:对此目标位和参数位set
执行逻辑与操作。void andNot(BitSet set)
:清除此BitSet
中所有的位,其相应的位在指定的BitSet
中设置。int cardinality()
:返回此BitSet
中设置为true
的位数。void clear()
:将此BitSet
中的所有位设置为false
。void clear(int index)
:将索引指定处的位设置为false
。void clear(int startIndex, int endIndex)
:将指定的fromIndex
(包括)到指定的toIndex
(不包括)范围内的位设置为false
。Object clone()
:复制此BitSet
,生成一个与之相等的新BitSet
。boolean equals(Object bitSet)
:将此对象与指定的对象进行比较。void flip(int index)
:将指定索引处的位设置为其当前值的补码。void flip(int startIndex, int endIndex)
:将指定的fromIndex
(包括)到指定的toIndex
(不包括)范围内的每个位设置为其当前值的补码。boolean get(int index)
:返回指定索引处的位值。BitSet get(int startIndex, int endIndex)
:返回一个新的BitSet
,它由此BitSet
中从fromIndex
(包括)到toIndex
(不包括)范围内的位组成。int hashCode()
:返回此位set
的哈希码值。boolean intersects(BitSet bitSet)
:如果指定的BitSet
中有设置为true
的位,并且在此BitSet
中也将其设置为true
,则返回ture
。boolean isEmpty()
:如果此BitSet
中没有包含任何设置为true
的位,则返回ture
。int length()
:返回此BitSet
的逻辑大小
,即BitSet
中最高设置位的索引加1
。int nextClearBit(int startIndex)
:返回第一个设置为false
的位的索引,这发生在指定的起始索引或之后的索引上。int nextSetBit(int startIndex)
:返回第一个设置为true
的位的索引,这发生在指定的起始索引或之后的索引上。void or(BitSet bitSet)
:对此位set
和参数位set
执行逻辑或操作。void set(int index)
:将指定索引处的位设置为true
。void set(int index, boolean v)
:将指定索引处的位设置为指定的值。void set(int startIndex, int endIndex)
:将指定的fromIndex
(包括)到指定的toIndex
(不包括)范围内的位设置为true
。void set(int startIndex, int endIndex, boolean v)
:将指定的fromIndex
(包括)到指定的toIndex
(不包括)范围内的位设置为指定的值。int size()
:返回此BitSet
表示位值时实际使用空间的位数。String toString()
:返回此位set
的字符串表示形式。void xor(BitSet bitSet)
:对此位set
和参数位set
执行逻辑异或操作。
import java.util.BitSet;
public class BitSetDemo {
public static void main(String args[]) {
BitSet bits1 = new BitSet(16);
BitSet bits2 = new BitSet(16);
for (int i = 0; i < 16; i++) { /* set some bits */
if ((i % 2) == 0) bits1.set(i);
if ((i % 5) != 0) bits2.set(i);
}
System.out.print("Initial pattern in bits1: ");
System.out.println(bits1);
System.out.print("Initial pattern in bits2: ");
System.out.println(bits2);
bits2.and(bits1); /* AND bits */
System.out.print("bits2 AND bits1: ");
System.out.println(bits2);
bits2.or(bits1); /* OR bits */
System.out.print("bits2 OR bits1: ");
System.out.println(bits2);
bits2.xor(bits1); /* XOR bits */
System.out.print("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: {}