簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM