创建一个大小为1位的Java布尔值

时间:2017-03-16 22:15:26

标签: java memory boolean

我正在编写一个程序,它需要速度和低内存开销。在其中,我必须制作一组二维布尔值,这可能会变得非常大。

在Java中,我知道布尔值是一个" overlay"到一个字符,所以它需要一个字节。

有没有办法制作一组布尔值,每个布尔值只有1位,技术上是必要的存储空间。谢谢!

2 个答案:

答案 0 :(得分:1)

你正在寻找的是一点点领域。 Java不支持位字段。 基本上使用C / C ++,编译器为您添加位处理(1<<<<<<<<<<<<<<<<<>等)。

好的解决方法:{{3}}

答案 1 :(得分:1)

如前所述,您可以使用基元作为位数组。这不是直接使用,但至少它减少了您存储的数据量。

我在这里找到了convertToBinary方法的魔力: Integer to binary array 我们可以轻松地使用这些数字。

e.g。

 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,true,false,true,false,true,false,true ,false,true,false,true,false,true]

希望有所帮助。