Java:BitSet 比较

标签 java bitset

假设我们有两个 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;
}

Demo.

关于Java:BitSet 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27331175/

相关文章:

c++ - std::bitset<0> 的大小?

Java BitSets 写入文件

c++ - 来自 bitset<n> 的有符号整数

java - 7Zip-JBinding 不满足链接错误

java - 如何使用与 wars 相同的类加载器制作 tomcat 8 加载 jar ?

java - 我在 Java Swing 中遇到异常,但程序继续正常运行。我应该担心吗?

c++ - 将字符数组转换为 std::string 以传递到 std::bitset 段错误

java - 为什么这个 bean 不为空

java - SWT/WindowBuilder 中的多行按钮文本?

c++ - 将 bitset<64> 转换为 quint8