java - 创建一个大小为 1 位的 Java boolean 值

标签 java memory boolean

我正在编写一个需要速度和低内存开销的程序。在其中,我必须创建一个二维 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/

相关文章:

PHP 零浮点返回真

java - 使用扫描仪读取文件

java - 使用 Jackson 1.9 解析 json 时出现问题

java - 从 PhoneGap 访问 Urban Airship Constant

java - 缓存一个 Map 变量并跨四个 tomcat 服务器访问它(java)

python - Python 2.7 中 set 与 frozenset 占用的内存

jquery - Bootstrap 开关返回 "on/off"而不是 "true/false"

java - 非 Json 格式转 JSON 格式

android - Android Studio 中的 GC 和 java 堆分析

javascript - 我如何在 Javascript 中比较字符串和 boolean 值?