假设我们有两个 Java 中的 BitSet 对象,其值为
//<MSB....LSB>
B1:<11000101>
B2:<10111101>
如何比较B1和B2才能知道B1代表的值大于B2代表的值。
逻辑运算符(>,<,==)是否为BitSet重载?或者我必须编写自己的实现吗?
更新:刚刚发现“参数类型 java.util.BitSet、java.util.BitSet 的运算符 > 未定义”。有没有内置的方法可以做到这一点?
最佳答案
您可以通过将两个集合异或
放在一起,并将结果的长度
与位集的长度进行比较来实现:
- 如果
xor
为空,则位集相等。您可以通过调用equals()
来绕过此操作
- 否则,
xor
结果的长度将等于两个值之间不同的最高有效位的位置。 - 两个操作数中哪一个设置了该位,就是两者中较大的一个。
这是一个示例实现:
int compare(BitSet lhs, BitSet rhs) {
if (lhs.equals(rhs)) return 0;
BitSet xor = (BitSet)lhs.clone();
xor.xor(rhs);
int firstDifferent = xor.length()-1;
if(firstDifferent==-1)
return 0;
return rhs.get(firstDifferent) ? 1 : -1;
}
关于Java:BitSet 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27331175/