Есть ли прецедент для метода 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()
, который мне не хватает? Это полезно? Кто-нибудь когда-либо использовал это для чего-нибудь? Может быть, это важно для некоторых ручных бит-скручиваний или чего-то подобного?
EDIT (после нескольких исследований)
Я понял, что BitSet
был введен в Java 1.0, тогда как структура Collections с большинством используемых нами классов была введена в Java 1.2. Так что в основном мне кажется, что size()
хранится из-за унаследованных причин, и для него нет реального использования. Новые классы Collection не имеют таких методов, в то время как некоторые из старых (Vector
, например) делают.