簡體   English   中英

使Java布爾值的大小為1位

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM