处理(即执行所有按位操作)位掩码的最有效数据结构是什么,这些位掩码具有已知大小但大于64位?
byte[]
? BigInteger
?还有其他什么呢?
需要与Java 7兼容,并且应该快速(或者至少与合理预期的一样快,考虑到它们的大小),例如
if(bitmask & 7 != 0){...}
和
bitmask1 |= bitmask2
等等。
答案 0 :(得分:3)
您无法直接执行此操作,因为可用作位掩码的原始数字的最大大小实际上是长值的64位。您可以做的是将位掩码分成2个或更多的整数或长整数然后手动管理。
int[] mask = new int[4];
final int MAX_SHIFT = 32;
void set(int b) {
mask[b / MAX_SHIFT] |= 1 << (b % MAX_SHIFT);
}
boolean isSet(int b) {
return (mask[b / MAX_SHIFT] & (1 << (b % MAX_SHIFT))) != 0;
}
或者您使用BitSet
BitSet bitSet = new BitSet(101);
bitSet.set(100);