How can I flip all the bits in a Java BitSet
, while preserving its length?
For example, given the following BitSet:
BitSet.valueOf(new byte[] { 0b100111 }) // {0, 1, 2, 5}
Is there a simple method to flip all the bits, while preserving the BitSet length (6, in the above example)?
I would like to get:
BitSet.valueOf(new byte[] { 0b011000 }) // { 3, 4 }
Advertisement
Answer
BitSet
has a flip(from, to)
method, which allows you to flip bits in a range:
yourBitSet.flip(0, length);
The question you need to answer, however, is what you actually mean by “length”.
A
BitSet
has thesize()
method, but that reports the number of bits it has allocated space for – perhaps more than you think the size is.It also has a
length()
method, which reports the highest-set bit in the bit set – perhaps less than you think the length of the bitset is.
Assuming you’re OK with using length()
, you can use:
yourBitSet.flip(0, yourBitSet.length());
Of course, since this clears the highest-set bit, yourBitSet
will have a smaller length()
afterwards.