Почему 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 позволит избежать всех выделений.

Другие вопросы по тегам