繁体   English   中英

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

[英]What is the most efficient way to compare two arrays of booleans?

我有一个数组a的10个布尔值(或等价的数<1024的二进制表示)。 我想通过以下方式将这个数组与大小相同的布尔数b[i]进行compare(a,b[i]) :如果数组a的元素永远不会compare(a,b[i])函数compare(a,b[i])应该返回true true时的在同一位置的元素b[i]false

作为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;
}

我觉得应该有用......

如果您有数据的int表示,则可以使用按位运算符:

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

这个对我有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM