Bitset改進你的程式品質
- 2019 年 10 月 19 日
- 筆記
1:Bitset介紹
BitSet 是用於存儲二進位位和對二進位進行操作的 Java 數據結構,
此類實現了一個按需增長的位向量。位 set 的每個組件都有一個 boolean
值。用非負的整數將 BitSet
的位編入索引。可以對每個編入索引的位進行測試、設置或者清除。通過邏輯與、邏輯或和邏輯異或操作,可以使用一個 BitSet
修改另一個 BitSet
的內容。
默認情況下,set 中所有位的初始值都是 false
。
2:優化空間
在程式runtime時,我們經常需要使用數組來記住程式的運行狀態,並且根據這些狀態及時 對數據做出更新,一般有以下處理辦法
- 使用 Int [] state=new int[22]; 保存狀態
- 使用 boolean [] state = new boolean[22] 保存狀態
分析可知,1byte=8bit int佔用4個位元組,如果考慮使用bit直接存儲狀態 ,將會大大節約時間, 不過在改變你的編程習慣之前,你應該清楚 我們如何保存狀態,以及對於狀態的操作
3:Bitset常用api
構建
BitSet() 創建一個新的位 set。 默認64 BitSet(int nbits) 創建一個位 set,它的初始大小足以顯式表示索引範圍在 0 到 nbits-1 的位。 一般要求給出大小
操作
更新:
void set(int bitIndex) 將指定索引處的位設置為 true。 void set(int bitIndex, boolean value) 將指定索引處的位設置為指定的值。 void set(int fromIndex, int toIndex) 將指定的 fromIndex(包括)到指定的 toIndex(不包括)範圍內的位設置為 true。 void set(int fromIndex, int toIndex, boolean value) 將指定的 fromIndex(包括)到指定的 toIndex(不包括)範圍內的位設置為指定的值。
獲取:
boolean |
get(int bitIndex) 返回指定索引處的位值。 |
BitSet |
get(int fromIndex, int toIndex) 返回一個新的 BitSet,它由此 BitSet 中從 fromIndex(包括)到 toIndex(不包括)範圍內的位組成。 |
翻轉:
boolean |
get(int bitIndex) 返回指定索引處的位值。 |
BitSet |
get(int fromIndex, int toIndex) 返回一個新的 BitSet,它由此 BitSet 中從 fromIndex(包括)到 toIndex(不包括)範圍內的位組成。 |
刪除
void |
clear() 將此 BitSet 中的所有位設置為 false 。 |
void |
clear(int bitIndex) 將索引指定處的位設置為 false 。 |
void |
clear(int fromIndex, int toIndex) 將指定的 fromIndex(包括)到指定的 toIndex(不包括)範圍內的位設置為 false 。 |
長度:
int |
cardinality() 返回此 BitSet 中設置為 true 的位數。 |
int |
length() 返回此 BitSet 的“邏輯大小”:BitSet 中最高設置位的索引加 1。 |
int |
size() 返回此 BitSet 表示位值時實際使用空間的位數。 |
重要: 遍歷相關:
int |
nextClearBit(int fromIndex) 返回第一個設置為 false 的位的索引,這發生在指定的起始索引或之後的索引上。 |
int |
nextSetBit(int fromIndex) 返回第一個設置為 true 的位的索引,這發生在指定的起始索引或之後的索引上。 |
4.BitSet 應用舉例