检查布尔数组是否包含true的最快方法

Pie*_*rtz 8 java

我有一个arrayboolean条目:

boolean[] myBooleanArray = new boolean[24];
Run Code Online (Sandbox Code Playgroud)

目前我检查它是否包含如此真实:

Arrays.asList(myBooleanArray).contains(true);
Run Code Online (Sandbox Code Playgroud)

这是检查布尔数组的最快方法吗?如果没有,执行此检查的最快方法是什么?

编辑:

我通过在Android 4.03 Samsung S2设备上将其作为应用程序运行,将您的答案中的方法计时如下:

boolean[] myBooleanArray = new boolean[24];

long startTime = System.nanoTime();
suggestedMethod(myBooleanArray);
long endTime = System.nanoTime();

long duration = endTime - startTime;
Log.i("timetest", Long.toString(duration));
Run Code Online (Sandbox Code Playgroud)

时间排名超过五次,最快的是:

  1. 在5334和11584 ns之间:

    for (boolean value : myBooleanArray) {
        if (value) {
            return true;
        }
    }
    return false;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在160542和171417 ns之间:

    Arrays.asList(myBooleanArray).contains(true);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在191833和205750之间ns:

    Booleans.contains(myBooleanArray, true);
    
    Run Code Online (Sandbox Code Playgroud)

Jig*_*shi 11

只需遍历数组

for(boolean value: myBooleanArray){
  if(value){ return true;}
}
return false;
Run Code Online (Sandbox Code Playgroud)


Phi*_*ler 6

如果您使用的是Guava库(它有很多有用的东西):

Booleans.contains(myBooleanArray, true);
Run Code Online (Sandbox Code Playgroud)

(JavaDoc)

该方法的文档也描述了另一种方法.你可以更换boolean[]一个BitSet(应该是更多的内存效率),并调用!bitSet.isEmpty()检查至少一个位是否为真.

  • 对于布尔数组,我想不出任何更快的方法(但 BitSet 实际上可能更快)。 (2认同)