Почему BitSet не повторяется?
BitSet
имеет stream()
метод, но он не реализует Iterable
интерфейс, как и другие типы, которые предоставляют этот метод. Есть ли конкретная причина для этого?
4 ответа
Ни один из методов в Iterable
(foreach
, iterator
, а также spliterator
) предоставляется в BitSet
, Здесь нет stream()
метод в Iterable
,
Кроме того stream()
метод BitSet
не возвращает поток по битам набора битов, но возвращает поток по индексам битов, значения которых установлены (что является своего рода путаницей TBH). Поэтому с технической точки зрения, похоже, что с этим почти ничего общего Iterable
,
Одна из причин (может быть, не вся) Iterable
будет неэффективным, потому что битовые индексы должны быть упакованы; поток может использовать примитивные целые числа.
Существует эффективный способ перебора набора битов без использования Iterable
, как описано в Javadoc, так что в этом нет необходимости.
BitSet
не является "истинным" членом фреймворка java collection, поэтому технически не нужно реализовывать Collection.iterator()
и предоставить один.
public class BitSet implements Cloneable, java.io.Serializable
Более того, оба были бы плохо приспособлены друг к другу.
BitSet не являются общими, в отличие от java.util.Iterator; BitSet предоставляет специальные методы со специальными функциями для побочных эффектов и случайной адресации, в отличие от Iterator.
Вероятно, чтобы избежать дорогостоящего бокса каждый бит к Boolean
пример.
Зацикливание на нем с использованием его собственных API позволит избежать всех выделений.