有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么位集不可编辑?

BitSet有一个stream()方法,但它不像提供此方法的其他类型那样实现Iterable接口。有没有具体的原因


共 (4) 个答案

  1. # 1 楼答案

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

    此外BitSetstream()方法不返回位集的位上的流,而是返回值设置为的位的索引上的流(这有点让人困惑)。因此,从技术上讲,似乎与Iterable几乎没有任何共同之处

  2. # 2 楼答案

    BitSet不是java集合框架的“真正”成员,因此从技术上讲,不需要实现Collection.iterator()并提供一个

    public class BitSet implements Cloneable, java.io.Serializable 
    

    更重要的是,两者都不适合在一起

    与java不同,位集不是泛型的。util。迭代器;与迭代器不同,位集提供了具有特殊功能的特殊方法,用于处理副作用和随机寻址

  3. # 3 楼答案

    可能是为了避免昂贵地将每一位装箱到Boolean实例

    使用自己的API在其上循环将避免所有分配

  4. # 4 楼答案

    一个原因(可能不是全部原因)是Iterable效率低下,因为位索引必须装箱(*);流能够使用基本整数

    正如Javadoc中所描述的,有一种有效的方法可以在不使用Iterable的情况下迭代位集,因此实际上没有必要这样做


    (*)但是,对于大小为128或更小的位集,装箱成本较低,因为将使用缓存的装箱实例