[英]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.