我正在编写一个需要速度和低内存开销的程序。在其中,我必须创建一个二维 boolean 数组,它可能会变得非常大。
在Java中,我知道 boolean 值是字符的“覆盖”,因此它占用一个字节。
有没有办法制作一个 boolean 数组,每个 boolean 数组只有1位,技术上需要存储空间。谢谢!
最佳答案
正如已经提到的,您可以将基元用作位数组。这并不容易使用,但至少它减少了您存储的数据量。
借助我在这里找到的方法convertToBinary的魔力: Integer to binary array 我们可以轻松地处理这些数字。
例如
public static void main(String[] args) {
Integer[] flags = {
0b0101_0101_0101_0101_0101_0101_0101_0101,
0b0101_0101_0101_0101_0101_0101_0101_0101,
0b0101_0101_0101_0101_0101_0101_0101_0101
};
for (Integer flag : flags) {
System.out.println(Arrays.toString(getBooleanArray(flag)));
}
}
private static boolean[] getBooleanArray(Integer value) {
String valueAsString = Integer.toBinaryString(value).replaceFirst("^0+(?!$)", "");
return convertToBinary(value, valueAsString.length());
}
private static boolean[] convertToBinary(int b, int size) {
boolean[] binArray = new boolean[size];
boolean bin;
for (int i = size - 1; i >= 0; i--) {
if (b % 2 == 1) bin = true;
else bin = false;
binArray[i] = bin;
b /= 2;
}
return binArray;
}
输出:
[true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true]
[真,假,真,假,真,假,真,假,真,假,真,假,真,假,真,假,真,假,真,假,真,假,真,假,真,假,真,假,真,假,真] [真,假,真,假,真,假,真,假,真,假,真,假,真,假,真,假,真,假,真,假,真,假,真,假,真,假,真,假,真,假,真]
希望有帮助。
关于java - 创建一个大小为 1 位的 Java boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42845773/