![](/img/trans.png)
[英]Convert bit vector (array of booleans) to an integer, and integer to bit vector, in Java
[英]Java multi-bit / compact small integer array
我正在努力實現一些布隆過濾器變體,一個非常有用的數據結構是一個緊湊的多位數組; 也就是說,一個數組,其中每個元素都是一個大約 4 位的緊湊整數。
空間效率在這里是最重要的,所以雖然一個普通的整數數組可以提供我想要的功能,但它會比必要的更笨重。
在我嘗試用位算術自己實現這個功能之前,我想知道是否有人知道已經提供這種數據結構的庫。
編輯:靜態大小很好。 理想的情況是在每個單元的位數方面靈活的實現方式。 不過,這可能有點令人期待(沒有雙關語?)。
如果您在創建后沒有修改數組,
java.util.BitSet
會為您完成所有位掩碼,但訪問速度很慢,因為您必須單獨獲取每個位並自己進行掩碼以從 4 位重新創建 int .
話雖如此,自己編寫可能是最好的方法。 自己進行位算術並不難,因為每個字節只有 2 個值,因此解碼高位是(array[i] & 0xF0) >> 4
,低位是array[i] & 0x0F
看看http://code.google.com/p/javaewah/提供的壓縮 BitSet,它允許自由設置位,並確保它通過使用的壓縮算法有效地使用內存。
即像
EWAHCompressedBitmap32 set = new EWAHCompressedBitmap32();
set.set(0);
set.set(1000000);
仍然只會占用幾個字節,而不是像 Java BitSet 那樣占用 1 MB ...
您應該能夠通過相應地將索引乘以 BitSet 來將 4 位整數映射到 BitSet
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.