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