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

mR_*_*r0g 1 java collections bitset

java.util.BitSet由long []支持,因此最小大小为64位.我需要缓存大量(~2M)的对象,每个对象都需要一个大小为23的BitSet.对于小尺寸,BitSet是否有更多的空间效率?例如,是否有一个BitSet类型的数据结构,由byte []而不是long []支持?这将允许我将我的23位存储在3个字节而不是8个字节中.

das*_*ght 8

java.util.BitSet班是专为大位设置.当你需要大小为23的位集时,即使是基于ob 3字节的位集也会占用太多内存,因为任何大小的数组都会为数组本身使用额外的引用,这很可能是4到8个字节.

就内存而言,最经济的解决方案是使用ints而不是位集,并编写自己需要的位集操作的实现.由于位集上的操作大部分是从按位操作复制的,因此实现它们应该没有问题:

boolean get(int mySet, int index) {
    return (mySet & (1<<index)) != 0;
}
void set(int mySet, int index) {
    mySet |= (1<<index);
}
void clear(int mySet, int index) {
    mySet &= (1<<index);
}
Run Code Online (Sandbox Code Playgroud)

...等等.