将布尔数组中的所有值设置为 true

Posted

技术标签:

【中文标题】将布尔数组中的所有值设置为 true【英文标题】:Setting all values in a boolean array to true 【发布时间】:2014-01-19 03:46:48 【问题描述】:

Java 中有没有一种方法可以?

显然我可以使用 for 循环来做到这一点,但如果我有(例如)一个大型 3D 数组,我想使用循环会非常低效。

Java 中是否有任何方法可以将某个数组中的所有值设置为 true,或者在数组初始化时将所有值设置为 true?

(例如

boolean[][][] newBool = new boolean[100][100][100];
newBool.setAllTrue();

//Rather than

for(int a = 0; a < 100; a++) 
    for(int b = 0; b < 100; b++) 
        for(int c = 0; c < 100; c++) 
            newBool[a][b][c] = true;
        
    

【问题讨论】:

@AndrewThompson 他有充分的理由去“想象”,因为在其他更强大的语言(如 C 和 C++)中,您可以使用 memset 来实现,这比循环更有效。但是,在 Java 中这是不可能的。 Fastest way to set all values of an array? 的可能重复项 如果你有一个布尔数组,为什么不将它替换为一个整数并执行按位运算? Here 是一种不使用循环的解决方案。 :D @AndrewThompson 我没有说我想象会有另一种方式。我刚刚得出的结论是,运行 100^3 个值会非常低效...... 【参考方案1】:

您可以使用 Java 7 的 Arrays.fill,它为指定数组的每个元素分配一个指定的值......就像这样。这仍然使用循环,但至少写起来更短。

boolean[] toFill = new boolean[100] ;
Arrays.fill(toFill, true);

【讨论】:

grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/… -1 OP 特别要求 3D 数组。 Arrays.fill 仅适用于一维。 不是这样,你可以对 3D 数组做同样的事情,我只是假设他可以推断自己 boolean[][][] toFill = new boolean[100][100][100] ; 如果 Arrays.fill 在内部使用循环,它如何比 OP 使用循环的示例更高效? 是的,你是对的,它与循环相同。只是更简洁。我认为在 Java 中没有办法在没有循环的情况下做到这一点。【参考方案2】:

在这种情况下没有捷径可走。最好的选择是使用 for 循环。可能还有其他几个选项,例如在声明 (!!) 时设置值。或者您可以使用 Arrays.fill 方法,但在内部它将使用循环。或者如果可能的话,然后切换您的值的使用。

【讨论】:

【参考方案3】:

使用 java.util.BitSet 代替布尔数组要好得多。在 BitSet 中,您可以设置某个范围内的值。它对内存有效,因为它使用 long 数组作为内部状态。

BitSet bSet = new BitSet(10);
bSet.set(0,10);

【讨论】:

【参考方案4】:
boolean[] isPrime = new boolean[10];
 
Arrays.fill(isPrime, true);

这将为数组的所有元素分配true。 因为默认情况下,boolean array 的所有元素都为 false。

【讨论】:

以上是关于将布尔数组中的所有值设置为 true的主要内容,如果未能解决你的问题,请参考以下文章

如果在配置中将布尔值设置为 true,我如何获得? [关闭]

如何在 Code First 模型中的布尔值上设置默认值?

如何将数组中的真假字符串解析为布尔值

如何在Android中再次设置布尔值true?

如何从一个反应组件到主 app.js 将布尔值设置为 false

根据SSRS中的布尔参数选择更改文本框