我的算法使用了大量的boolean
,并且据我所知,每个布尔变量需要1个字节。无论如何都要声明一个布尔数组并减少内存使用量,因为我正在处理电话环境。
答案 0 :(得分:18)
使用该类实现了一个根据需要增长的位向量。每 位组的组件具有布尔值。 BitSet的位是 由非负整数索引。各个索引位可以是 检查,设置或清除。一个BitSet可用于修改 另一个BitSet的内容通过逻辑AND,逻辑包含OR, 和逻辑异或运算。
boolean
与BitSet
之间的答案 1 :(得分:1)
您也可以使用EnumSet。这允许您使用命名位,并且比使用使用索引位的BitSet更友好。
与枚举类型一起使用的专用Set实现。枚举集中的所有元素必须来自单个枚举类型,该类型在创建集时显式或隐式指定。枚举集在内部表示为位向量。这种表现非常紧凑和高效。这个类的空间和时间性能应该足够好,以允许它作为传统的基于int的“位标志”的高质量,类型安全的替代品。如果它们的参数也是枚举集,即使批量操作(例如containsAll和retainAll)也应该非常快速地运行。
e.g。
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会更清晰。