繁体   English   中英

是否可以在Java中声明一个1位变量?

[英]Is it possible to declare an 1-bit variable in Java?

我的算法使用了一个庞大的boolean数组,正如我所教导的,每个布尔变量需要1个字节。 无论如何都要声明一个布尔数组并减少内存使用量,因为我正在处理手机环境。

编辑:我的朋友和我正在讨论BitSet是否比普通布尔数组慢。 请澄清一下。 该算法仍然需要性能作为最佳需求。

位集合

该类实现了一个根据需要增长的位向量。 位组的每个组件都有一个布尔值。 BitSet的位由非负整数索引。 可以检查,设置或清除各个索引位。 一个BitSet可用于通过逻辑AND,逻辑包含OR和逻辑异或运算来修改另一个BitSet的内容。

链接到使用booleanBitSet之间的基准

您也可以使用EnumSet 这允许您使用命名位,并且比使用使用索引位的BitSet更友好。

用于枚举类型的专用Set实现。 枚举集中的所有元素必须来自单个枚举类型,该类型在创建集时显式或隐式指定。 枚举集在内部表示为位向量。 这种表现非常紧凑和高效。 这个类的空间和时间性能应该足够好,以允许它作为传统的基于int的“位标志”的高质量,类型安全的替代品。 如果它们的参数也是枚举集,即使批量操作(例如containsAll和retainAll)也应该非常快速地运行。

例如

BitSet bs = new BitSet(4);
bs.set(1); // READY
bs.set(3); // LARGE_FLAG
boolean largeFlag = bs.get(1); // LARGE_FLAG
System.out.println("Using BitSet: "+bs);

EnumSet<Settings> settings = EnumSet.noneOf(Settings.class);
settings.add(Settings.READY);
settings.add(Settings.LARGE_FLAG);
boolean largeFlag2 = settings.contains(Settings.LARGE_FLAG);
System.out.println("Using EnumSet: "+settings);

版画

Using BitSet: {1, 3}
Using EnumSet: [READY, LARGE_FLAG]

如果合适,恕我直言EnumSet更清晰。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM