如何用 0 填充 BitSet?

How to populate a BitSet with 0s?

我正在尝试用全 0 填充大小为 32 的 BitSet。
当我做 longWord.set(i);它填充了所有 i 值。
当我做 longWord.set(i,false);它根本没有填充。

如何将所有 32 位设置为 0?

longWord = new BitSet(32);

        for(int i = 0; i < 32; i++) 
        {
            longWord.set(i);
        }
        System.out.println(longWord);

默认情况下,BitSet 的值初始化为 false,因此只需: longWord = new BitSet(32);应该给你想要的。

我不太清楚你的意思

When I do longWord.set(i,false); it doesn't populate at all.

查看 JavaDoc 我可以看到您应该得到一个所有值都设置为 false 的 longWord。如果不是这样,你能 post 打印什么 System.out.println(longWord); 吗?

编辑:

看一下,如果所有值都设置为 0,toString() 方法似乎会导致 {}。值设置为 false,只是不打印。 正在做

for(int i = 0; i < 32; i++) {
    System.out.println(longWord.get(i));
}

会使这一点显而易见。在将它们全部设置为 true 后打印它们时,您将获得设置为 true 的位的索引(在您的情况下是所有位)。要看到这一点,只需执行以下操作:

BitSet longWord = new BitSet(32);
longWord.set(26);
System.out.println(longWord);

您将在印刷品中看到 26。

鉴于 Bitset 提供的模型,您尝试做的事情没有意义。

从概念上讲,Bitset 表示 无限 位集。虽然 Bitset 有一个 length() 方法,但它 returns 是这样的:

the index of the highest set bit in the BitSet plus one. Returns zero if the BitSet contains no set bits.

这被描述为“逻辑大小”。

但是您想表示一个概念性的“位数组”,其中未设置(即零)位是位集“大小”的一部分。

有几种方法可以解决这个问题:

  • 将您的概念长度与Bitset对象分开;例如使用 int 变量。
  • Bitset 编写一个简单的包装器 class,它的行为符合您的要求;即实现显式 length 字段的一个。
  • 寻找一个替代位集 class,其行为方式符合您的要求。