簡體   English   中英

小尺寸的 java.util.BitSet 的替代品?

[英]Alternative to java.util.BitSet for small sizes?

java.util.BitSet 由 long[] 支持,因此最小大小為 64 位。 我需要緩存大量 (~2M) 的對象,每個對象都需要大小為 23 的 BitSet。有沒有比 BitSet 更適合小尺寸的空間效率的替代方法? 例如,是否有一個由 byte[] 而不是 long[] 支持的 BitSet 類型的數據結構? 這將允許我將 23 位存儲在 3 個字節而不是 8 個字節中。

java.util.BitSet類是為較大的位集設計的。 當您需要大小為 23 的位集時,即使是基於 ob 3 字節的位集也會使用太多內存,因為任何大小的數組都使用數組本身的附加引用,這很可能是四到八個字節。

就內存而言,最經濟的解決方案是使用int而不是位集,並編寫您自己需要的位集操作的實現。 由於位集上的操作大部分是從按位操作復制的,因此您應該沒有問題實現它們:

boolean get(int mySet, int index) {
    return (mySet & (1<<index)) != 0;
}
int set(int mySet, int index) {
    return mySet | (1<<index);
}
int clear(int mySet, int index) {
    return mySet & (1<<index);
}

...等等。

首先,長度為 3 的字節數組占用的空間遠不止 3 個字節。 Java 中的任何對象實例都有內存開銷,包括 BitSet。

為了保持低內存消耗,嘗試使用 int 數組的元素進行位設置。 此類元素不能表示為對象,因此您必須開發過程接口而不是面向對象。 告訴我們您需要對位集進行哪些操作,我們將提供更詳細的建議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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