将布尔数组中的所有值设置为 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,我如何获得? [关闭]