比较两个布尔值数组的最有效方法是什么?



我有一个包含10个布尔值的数组a(或者相当于一个数字<1024)。我想通过以下方式将这个数组与相同大小的布尔值的大型数组b[i]进行比较:如果数组a的元素不为true,而在b[i]中相同位置的元素为false,则函数compare(a,b[i])应返回true

以java

为例
boolean compare(boolean a1, boolean a2){
for (int j = 0; j<10; j++) 
   if (a1[j] && !a2[j]) 
      return false;
return true;
}

是否有更好的实现这个函数?如果将对应的二进制数视为整数A1(和A2)的素数分解的系数,则等效函数为

boolean compare (int A1, int A2){
if (gcd(A1,A2)==A1) 
   return true;
else
   return false;
}

,例如(http://www.java-tips.org/java-se-tips/java.lang/finding-greatest-common-divisor-recursively.html)

int gcd(int a, int b) {
if (b==0) 
   return a;
else
   return gcd(b, a % b);
}

但我不认为这是更有效的(但我可能是错的)。

有人有主意吗?欢迎大家提出建议!

编辑:我稍后会回去做一些分析…谢谢你的建议!

我不确定BitSet是否更有效,但它应该在配置文件的短列表中。

如果你可以用整数代替数组,为什么不直接:

return ((a1 & ~a2) == 0)

如果您可以将这些布尔数组改为整数,则可以使用位运算:

boolean compare(int a1, int a2) {
  return (a1 | a2) == a2;
}

如果数据是整型的,可以使用位操作符:

boolean compare(int a, int b) {
    int c = ~b ^ a;
    return c == 0;
}

如果出现 b[i] ^ a[i]c将不为零。

我可能有点跑题了。然而,似乎有一种java内置的方法可以做到这一点。

java.util.Arrays.equals(blnArray1,blnArray2)

参考:http://www.java-examples.com/compare-two-java-boolean-arrays-example

最新更新