Java 資料結構 - Bitset 類
BitSet 類建立一個特殊型別的陣列,用於儲存位值。它可以根據需要增加大小,這使得它類似於位向量。BitSet 的索引由非負值表示,每個索引都儲存一個布林值。
Java 中的 BitSet 類
BitSet 類實現了一組位或標誌,可以單獨設定和清除。當您需要跟蹤一組布林值時,此類非常有用;您只需為每個值分配一個位,並根據需要設定或清除它。BitSet 陣列可以根據需要增加大小。這使得它類似於位向量。
BitSet 定義了以下兩個建構函式。
| 序號 | 建構函式和描述 |
|---|---|
| 1 | BitSet( ) 此建構函式建立一個預設物件。 |
| 2 | BitSet(int size) 此建構函式允許您指定其初始大小,即它可以容納的位數。所有位都初始化為零。 |
BitSet 實現 Cloneable 介面並定義下表中列出的方法
| 序號 | 方法和描述 |
|---|---|
| 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) 將 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) 反轉 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 的位。呼叫物件不會更改。 |
| 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) 將呼叫 BitSet 物件的內容與 bitSet 指定的內容進行 OR 運算。結果將放入呼叫物件中。 |
| 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 之間的位。 |
| 23 | void set(int startIndex, int endIndex, boolean v) 將 startIndex 到 endIndex 之間的位設定為 v 中傳遞的值。True 設定位,False 清除位。 |
| 24 | int size( ) 返回呼叫 BitSet 物件中的位數。 |
| 25 | String toString( ) 返回呼叫 BitSet 物件的字串等效項。 |
| 26 | void xor(BitSet bitSet) 將呼叫 BitSet 物件的內容與 bitSet 指定的內容進行 XOR 運算。結果將放入呼叫物件中。 |
示例
以下程式說明了此資料結構支援的幾種方法
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("\n Initial 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:
{}