Java Bitset類
一個Bitset類創建一種特殊類型的數組來保存位值。BitSet中數組大小會隨需要增加。這和位向量(vector of bits)比較類似。
這是一個傳統的類,但它在Java 2中被完全重新設計。
BitSet定義了兩個構造方法。
第一個構造方法創建一個默認的對象:
BitSet()
第二個方法允許用戶指定初始大小。所有位初始化為0。
BitSet(int size)
BitSet中實現了Cloneable介面中定義的方法如下表所列:
序號 | 方法描述 |
---|---|
1 |
void and(BitSet set) 對此目標位 set 和參數位 set 執行邏輯與操作。 |
2 |
void andNot(BitSet set) 清除此 BitSet 中所有的位,其相應的位在指定的 BitSet 中已設置。 |
3 |
int cardinality( ) 返回此 BitSet 中設置為 true 的位數。 |
4 |
void clear( ) 將此 BitSet 中的所有位設置為 false。 |
5 |
void clear(int index) 將索引指定處的位設置為 false。 |
6 |
void clear(int startIndex, int endIndex) 將指定的 startIndex(包括)到指定的 toIndex(不包括)範圍內的位設置為 false。 |
7 |
Object clone( ) 複製此 BitSet,生成一個與之相等的新 BitSet。 |
8 |
boolean equals(Object bitSet) 將此對象與指定的對象進行比較。 |
9 |
void flip(int index) 將指定索引處的位設置為其當前值的補數。 |
10 |
void flip(int startIndex, int endIndex) 將指定的 fromIndex(包括)到指定的 toIndex(不包括)範圍內的每個位設置為其當前值的補數。 |
11 |
boolean get(int index) 返回指定索引處的位值。 |
12 |
BitSet get(int startIndex, int endIndex) 返回一個新的 BitSet,它由此 BitSet 中從 fromIndex(包括)到 toIndex(不包括)範圍內的位組成。 |
13 |
int hashCode( ) 返回此位 set 的哈希碼值。 |
14 |
boolean intersects(BitSet bitSet) 如果指定的 BitSet 中有設置為 true 的位,並且在此 BitSet 中也將其設置為 true,則返回 true。 |
15 |
boolean isEmpty( ) 如果此 BitSet 中沒有包含任何設置為 true 的位,則返回 true。 |
16 |
int length( ) 返回此 BitSet 的"邏輯大小":BitSet 中最高設置位的索引加 1。 |
17 |
int nextClearBit(int startIndex) 返回第一個設置為 false 的位的索引,這發生在指定的起始索引或之後的索引上。 |
18 |
int nextSetBit(int startIndex) 返回第一個設置為 true 的位的索引,這發生在指定的起始索引或之後的索引上。 |
19 |
void or(BitSet bitSet) 對此位 set 和位 set 參數執行邏輯或操作。 |
20 |
void set(int index) 將指定索引處的位設置為 true。 |
21 |
void set(int index, boolean v) 將指定索引處的位設置為指定的值。 |
22 |
void set(int startIndex, int endIndex) 將指定的 fromIndex(包括)到指定的 toIndex(不包括)範圍內的位設置為 true。 |
23 |
void set(int startIndex, int endIndex, boolean v) 將指定的 fromIndex(包括)到指定的 toIndex(不包括)範圍內的位設置為指定的值。 |
24 |
int size( ) 返回此 BitSet 表示位值時實際使用空間的位數。 |
25 |
String toString( ) 返回此位 set 的字串表示形式。 |
26 |
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);
// 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: {}