BitSet
有stream()
方法,但它没有实现像其他类型提供此方法的Iterable
接口。是否有此特殊原因?
在Iterable
方法(foreach
,iterator
和spliterator
)没有在BitSet
提供。有一个在stream()
没有Iterable
方法。
此外stream()
的BitSet
方法不返回在比特组的比特流,但在返回其值被设定的位的索引(其种混淆TBH)的流。因此,从技术上来说似乎是几乎毫无共同之处Iterable
。
原因之一(不是全部原因,也许)是Iterable
会低效,因为位指标均将盒装(*);流能够使用原始的整数。
有迭代位集而不使用Iterable
,如Javadoc中所述的有效途径,所以它不是真的有必要。
(*)然而,对于具有大小为128或更小的位集,拳击将是便宜的,因为高速缓存的盒装实例将被使用。
BitSet
不是Java集合框架的“真实”的成员,所以在技术上,没有必要实施Collection.iterator()
并提供一个。
public class BitSet implements Cloneable, java.io.Serializable
更重要的是,无论是生病配合在一起。
位集合是不是通用的,不像java.util.Iterator的; BitSet中提供了特殊功能的副作用和随机寻址,不像迭代器特别的方法。
大概是为了避免昂贵的拳击每一位到Boolean
实例。
利用自身的API将避免所有分配循环执行它。