Я пропускаю что-то крайне очевидное? Или делает просто, никто в мире на самом деле не использует java.util. BitSet?
Следующие тестовые сбои:
@Test
public void testBitSet() throws Exception {
BitSet b = new BitSet();
b.set(0, true);
b.set(1, false);
assertEquals(2, b.length());
}
Действительно неясно мне, почему я не заканчиваю с BitSet длины 2 и значение 10. Я посмотрел на источник для java.util. BitSet, и на эпизодическом контроле, между которым этому, кажется, не удается сделать достаточное различие немного, это было установлено ложь и немного который никогда не устанавливался ни на какое значение...
(Обратите внимание, что явно установка размера BitSet в конструкторе не имеет никакого эффекта, например:
BitSet b = new BitSet(2);
Люди действительно используют BitSet
; однако они используют его не для того, что вы намереваетесь. Вероятно, лучше всего рассматривать BitSet
как очень компактную, эффективную с точки зрения памяти форму Set
, обладающую тем особенным свойством, что вы не можете помещать в него отрицательные числа.
Очень часто с BitSet
s использовать их в шаблоне
for (int id = set.nextSetBit(0); id >= 0; id = set.nextSetBit(id + 1)) {
// do stuff to a set index
}
после того, как вы что-то сделаете, чтобы их заполнить. Это эквивалентно итерации по элементам набора Set
.
Ваш старший установленный бит (в смысле "установленный в 1") - это бит 0. Поэтому длина должна быть равна 1.
См. JavaDoc для длины:
public int length()
Возвращает "логический размер" этого BitSet: индекс старшего установленного бита в BitSet плюс один. Возвращает ноль, если набор битов не содержит установленных битов.
Возможно, вы ищете размер, хотя возможно, что он может быть больше, чем два, если биты распределяются с определенным разрешением (скажем, на границах 16 бит)?
Учитывая, что набор битов поддерживается long[], минимальный размер равен 64 (поскольку 1 long равен 64 битам). Размер увеличивается на кратное 64, и по какой-то причине они не сохранили количество битов, которое вы намеревались представить, когда используете конструктор, который принимает int.