我有一个10个布尔数的数组a
(或等价数字<1024的二进制表示)。我想通过以下方式将此数组与大量相同大小的布尔数组b[i]
进行比较:
如果compare(a,b[i])
中位于同一位置的元素为{{1},则数组true
的元素永远不会a
,函数true
应返回b[i]
}}。
作为java中的例子
false
这个功能有更好的实现吗?如果将相应的二进制数视为整数A1(和A2)的素数分解的系数,则等效函数将是
boolean compare(boolean a1, boolean a2){
for (int j = 0; j<10; j++)
if (a1[j] && !a2[j])
return false;
return true;
}
例如,(http://www.java-tips.org/java-se-tips/java.lang/finding-greatest-common-divisor-recursively.html)
boolean compare (int A1, int A2){
if (gcd(A1,A2)==A1)
return true;
else
return false;
}
但我不认为这更有效(但我可能错了)。
有没有人有想法?欢迎所有建议!
编辑:稍后我会回过头来进行一些分析......感谢您提出的所有建议!答案 0 :(得分:8)
我不确定BitSet
是否更有效率,但它应该在要进行配置文件的简短列表中。
答案 1 :(得分:6)
如果你可以使用整数而不是数组,为什么不只是:
return ((a1 & ~a2) == 0)
答案 2 :(得分:2)
如果您可以将这些布尔数组替换为整数,则可以使用按位运算:
boolean compare(int a1, int a2) {
return (a1 | a2) == a2;
}
我认为应该有用......
答案 3 :(得分:2)
如果您有数据的int表示,则可以使用按位运算符:
boolean compare(int a, int b) {
int c = ~b ^ a;
return c == 0;
}
如果发生¬b[i] ^ a [i] 的任何发生, c 将不会为零。
答案 4 :(得分:1)
我可能听起来有点不合时宜。但是,似乎有一种java内置的方法。
java.util.Arrays.equals(blnArray1,blnArray2)
参考:http://www.java-examples.com/compare-two-java-boolean-arrays-example
它对我有用。