簡體   English   中英

為什么BitSet不可以進行?

[英]Why is BitSet not Iterable?

BitSet有一個stream()方法,但它沒有像提供此方法的其他類型那樣實現Iterable接口。 這有什么特別的原因嗎?

BitSet沒有提供Iterableforeachiteratorspliterator )中的任何BitSet Iterable沒有stream()方法。

此外, BitSetstream()方法不會在位集的位上返回流,而是在其值設置的位索引上返回流(這是令人困惑的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM