Warum ist BitSet nicht iterierbar?

8

BitSet hat eine stream() -Methode, implementiert aber nicht die Iterable -Schnittstelle wie andere Typen, die diese Methode bereitstellen. Gibt es einen bestimmten Grund dafür?

    
Raffi Khatchadourian 24.01.2017, 20:23
quelle

4 Antworten

7

Keine der Methoden in Iterable ( foreach , iterator und spliterator ) wird in BitSet bereitgestellt. Es gibt keine stream() -Methode in Iterable .

Außerdem gibt die Methode stream() von BitSet keinen Stream über die Bits des Bitsatzes zurück, sondern gibt einen Stream über die Indizes der Bits zurück, deren Werte festgelegt sind (was Art von verwirrender TBH). Technisch gesehen scheint also mit Iterable fast nichts zu tun zu haben.

    
manouti 24.01.2017, 20:34
quelle
3

BitSet ist kein "wahres" Mitglied des Java-Collection-Frameworks, daher muss technisch nicht Collection.iterator() implementiert und eins bereitgestellt werden.

%Vor%

Mehr auf den Punkt, beide würden schlecht zusammen passen.

BitSet sind nicht generisch , im Gegensatz zu java.util.Iterator; BitSet bietet Ad-hoc-Methoden mit speziellen Funktionen für Nebenwirkungen und zufällige Adressierung, anders als Iterator.

    
Fabien Benoit-Koch 24.01.2017 20:34
quelle
3

Ein Grund (vielleicht nicht der ganze Grund) ist, dass Iterable ineffizient wäre, weil die Bit-Indizes eingerahmt werden müssen; Der Stream kann primitive Ints verwenden.

Es gibt eine effiziente Möglichkeit, das Bitset ohne Verwendung von Iterable zu durchlaufen, wie im Javadoc beschrieben, also ist es nicht wirklich notwendig.

    
Andy Turner 24.01.2017 20:35
quelle
-1

Wahrscheinlich um zu vermeiden, dass jedes Bit teuer zu einer Boolean Instanz wird.

Wenn Sie mit den eigenen APIs darüber schleifen, werden alle Zuweisungen vermieden.

    
SLaks 24.01.2017 20:32
quelle

Tags und Links