java为什么位集不可编辑? 2 年,2 月 Questions & Answers 587 BitSet有一个stream()方法,但它不像提供此方法的其他类型那样实现Iterable接口。有没有具体的原因
# 1 楼答案 Iterable(foreach、iterator和spliterator)中的任何方法都没有在BitSet中提供。在Iterable中没有stream()方法 此外BitSet的stream()方法不返回位集的位上的流,而是返回值设置为的位的索引上的流(这有点让人困惑)。因此,从技术上讲,似乎与Iterable几乎没有任何共同之处
# 2 楼答案 BitSet不是java集合框架的“真正”成员,因此从技术上讲,不需要实现Collection.iterator()并提供一个 public class BitSet implements Cloneable, java.io.Serializable 更重要的是,两者都不适合在一起 与java不同,位集不是泛型的。util。迭代器;与迭代器不同,位集提供了具有特殊功能的特殊方法,用于处理副作用和随机寻址
# 4 楼答案 一个原因(可能不是全部原因)是Iterable效率低下,因为位索引必须装箱(*);流能够使用基本整数 正如Javadoc中所描述的,有一种有效的方法可以在不使用Iterable的情况下迭代位集,因此实际上没有必要这样做 (*)但是,对于大小为128或更小的位集,装箱成本较低,因为将使用缓存的装箱实例
# 1 楼答案
Iterable
(foreach
、iterator
和spliterator
)中的任何方法都没有在BitSet
中提供。在Iterable
中没有stream()
方法此外
BitSet
的stream()
方法不返回位集的位上的流,而是返回值设置为的位的索引上的流(这有点让人困惑)。因此,从技术上讲,似乎与Iterable
几乎没有任何共同之处# 2 楼答案
BitSet
不是java集合框架的“真正”成员,因此从技术上讲,不需要实现Collection.iterator()
并提供一个更重要的是,两者都不适合在一起
与java不同,位集不是泛型的。util。迭代器;与迭代器不同,位集提供了具有特殊功能的特殊方法,用于处理副作用和随机寻址
# 3 楼答案
可能是为了避免昂贵地将每一位装箱到
Boolean
实例使用自己的API在其上循环将避免所有分配
# 4 楼答案
一个原因(可能不是全部原因)是
Iterable
效率低下,因为位索引必须装箱(*);流能够使用基本整数正如Javadoc中所描述的,有一种有效的方法可以在不使用
Iterable
的情况下迭代位集,因此实际上没有必要这样做(*)但是,对于大小为128或更小的位集,装箱成本较低,因为将使用缓存的装箱实例