[英]Why is BitSet not Iterable?
BitSet
有一個stream()
方法,但它沒有像提供此方法的其他類型那樣實現Iterable
接口。 這有什么特別的原因嗎?
在BitSet
沒有提供Iterable
( foreach
, iterator
和spliterator
)中的任何BitSet
。 Iterable
沒有stream()
方法。
此外, BitSet
的stream()
方法不會在位集的位上返回流,而是在其值設置的位的索引上返回流(這是令人困惑的TBH)。 因此,從技術上講,似乎與Iterable
幾乎沒有任何共同之處。
一個原因(可能不是全部原因)是Iterable
效率低下,因為比特索引必須加框(*); 流可以使用原始int。
有一種有效的方法可以在不使用Iterable
情況下迭代bitset,如Javadoc中所述,所以它並不是必需的。
(*)但是,對於大小為128或更小的位集,裝箱會很便宜,因為將使用緩存的盒裝實例。
BitSet
不是java集合框架的“真正”成員,因此從技術上講,不需要實現Collection.iterator()
並提供一個。
public class BitSet implements Cloneable, java.io.Serializable
更重要的是,兩者都是不合適的。
與java.util.Iterator不同,BitSet不是通用的 ; 與Iterator不同,BitSet為ad-hoc方法提供了副作用和隨機尋址的特殊功能。
可能要避免昂貴地將每一位裝Boolean
實例。
使用自己的API循環使用它將避免所有分配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.