如何在保留其长度的同时翻转 Java BitSet 中的所有位

How to flip all the bits in Java BitSet while preserving its length

如何翻转 Java BitSet 中的所有位,同时保持其长度?

例如,给定以下 BitSet:

BitSet.valueOf(new byte[] { 0b100111 })
// {0, 1, 2, 5}

是否有一种简单的方法来翻转所有位,同时保留 BitSet 长度(在上例中为 6)?

我想得到:

BitSet.valueOf(new byte[] { 0b011000 })
// { 3, 4 }

BitSet 有一个 flip(from, to) method,它允许您翻转范围内的位:

yourBitSet.flip(0, length);

然而,您需要回答的问题是“长度”的实际含义。

  • A BitSetsize() 方法,但它报告了它分配的位数 space - 可能比你想象的要多.

  • 它还有一个length()方法,它报告位集中的最高设置位——可能比你认为的位集长度要短。

假设您可以使用 length(),您可以使用:

yourBitSet.flip(0, yourBitSet.length());

当然,由于这清除了最高位,yourBitSet之后会有一个更小的length()