Есть ли вариант использования для size()
метод класса java.util.BitSet
?
Я имею в виду - JavaDoc четко говорит, что это зависит от реализации, он возвращает размер внутреннего long[]
хранилища в битах. Из того, что там написано, можно сделать вывод, что вы не сможете установить бит с более высоким индексом, чем size()
, но это не так, BitSet
может расти автоматически:
BitSet myBitSet = new BitSet();
System.out.println(myBitSet.size()); // prints "64"
myBitSet.set(768);
System.out.println(myBitSet.size()); // prints "832"
При каждой встрече с BitSet
в моей жизни я всегда хотел использовать length()
, так как он возвращает логический размер BitSet
:
BitSet myBitSet = new BitSet();
System.out.println(myBitSet.length()); // prints "0"
myBitSet.set(768);
System.out.println(myBitSet.length()); // prints "769"
Несмотря на то, что я программирую на Java последние 6 лет, эти два метода всегда меня сильно смущают. Я часто путаю их и случайно использую неправильный, потому что в своей голове я думаю о BitSet
как об умном Set<boolean>
, где я бы использовал size()
.
Это как если бы ArrayList
имел length()
, возвращающее количество элементов, и size()
, возвращающее размер базового массива.
Теперь, есть ли какой-либо вариант использования метода size()
, который мне не хватает? Это полезно в любом случае? Кто-нибудь когда-нибудь использовал его для чего-нибудь? Может быть важно какое-то ручное вращение бит или что-то подобное?
ИЗМЕНИТЬ (после дополнительных исследований)
Я понял, что BitSet
был представлен в Java 1.0, а фреймворк Collections с большинством используемых нами классов был представлен в Java 1.2. Так что в основном мне кажется, что size()
сохраняется из-за устаревших причин, и от него нет реальной пользы. В новых классах Collection таких методов нет, а в некоторых старых (Vector
, например).
size
... был прискорбно занижен. ...при условии, что *НИЧЕГО* о возвращаемом значении было... опасно... Значение может... отличаться на разных платформах. Многократное выполнение двухBitSet
может привести к тому, что значение... будет расти без ограничений... ...невозможно исправить..., поэтому мы добавили новый, точно определенный метод (length
), который возвращает полезную информацию... [ и] заменяет методsize
. - person Petr Janeček   schedule 05.09.2019