如何获得 Bitset 的实际长度?

How get real length of Bitset?

我在 JavaDoc 上阅读了 BitSet class 的 size() 和 length() 函数,我了解它们背​​后的逻辑。

但我需要一个函数,它 return 是 BitSet 的实际大小(我插入其中的位数)。例如下面的代码结果为 0 和 64,但我需要一个 return 5.

的函数
BitSet test = new BitSet(10);
for (int i = 0; i < 5; i++) {
    test.set(i, false);
}
System.out.println("len = " + test.length());
System.out.println("size = " + test.size());

BitSet 有 3 种描述其状态的方法(在长度和设置位的意义上)。

  1. length - Returns本BitSet的"logical size":BitSet中最高设置位的索引加一。
  2. size - Returns 此 BitSet 实际使用的 space 的位数来表示位值。
  3. cardinality - Returns 在此 BitSet 中设置为真的位数。

如果您需要跟踪设置位数 cardinality 方法就是答案。请注意,它仅跟踪 true 位。

如果您需要跟踪对 set 的任何调用,最简单的解决方案是使用另一个计数器变量。所以你可以创建一个包装器 class 或者扩展 BitSet (这可能不是最好的解决方案)。无论如何,在这种情况下你必须手工完成。

我的猜测是您认为您可以将 BitSet 视为 List 或您拥有 capacity 的东西(sizeBitSet 的情况下)并且size - 列表中元素的实际数量。但是对于 BitSet 只有 true 位有意义。