[英]Make a Java boolean with a size of 1 bit
我正在編寫一個需要速度和低內存開銷的程序。 在其中,我必須制作一個二維布爾數組,該數組可能會變得很大。
在Java中,我知道布爾值是char的“覆蓋”,因此它占用一個字節。
有什么方法可以使布爾數組組成,每個布爾數組只有1位,這在技術上是必需的存儲空間。 謝謝!
您正在尋找的是一個字段。 Java不支持位字段。 基本上,對於C / C ++,編譯器為您添加了位處理(1 << 2,1 << 3等)。
好的解決方法: 使用Java枚舉實現位域
如前所述,您可以將基元用作位數組。 這不是直接可行的方法,但至少會減少您存儲的數據量。
我在這里發現了方法convertToBinary的魔力: 整數轉換為二進制數組我們可以輕松地使用這些數字。
例如
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]
[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] [true,false,true,false,true,false,true,false,true,false,true,false,true,false,true,false,true,false,真,假,真,假,真,假,真,假,真,假,真,假,真]
希望能有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.