为什么BitSet不可以进行?

时间:2017-01-24 20:23:29

标签: java iterable bitset

"dependencies": { "max_recurrences": { "$ref": "#recurring" }, "recurrence_arguments": { "$ref": "#recurring" } }, "definitions": { "recurring": { "id": "#recurring", "properties": { "recurring": { "enum": [true] } } } } 有一个BitSet方法,但它没有像提供此方法的其他类型那样实现stream()接口。这是否有特定的原因?

4 个答案:

答案 0 :(得分:8)

Iterable中提供foreachiteratorspliteratorBitSet)中的所有方法均未提供。 stream()中没有Iterable方法。

此外stream()的{​​{1}}方法不会在位集的位上返回流,而是在其值设置的位的索引上返回一个流(这是一种令人困惑的TBH)。因此,从技术上讲,似乎与BitSet几乎没有任何共同之处。

答案 1 :(得分:4)

一个原因(可能不是完整的原因)是Iterable效率低下,因为比特索引必须加框(*);流可以使用原始整数。

有一种有效的方法来迭代bitset而不使用Iterable,如Javadoc中所述,所以它并不是必需的。

(*)但是,对于大小为128或更小的位集,装箱会很便宜,因为将使用缓存的盒装实例。

答案 2 :(得分:3)

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

public class BitSet implements Cloneable, java.io.Serializable 

更重要的是,两者都不合适。

BitSet不是泛型,与java.util.Iterator不同;与迭代器不同,BitSet为临时方法提供了副作用和随机寻址的特殊功能。

答案 3 :(得分:-1)

可能要避免昂贵地将每一位装箱到img = np.zeros((1,96,236,236)) sswitchs = np.zeros((1,96,708,708)) inp = T.tensor4('img') SW = T.tensor4('SW') tester = switchs(inp,3,SW) f = theano.function([inp, SW], tester) d = f(img,sswitchs) 实例。

使用自己的API循环使用它将避免所有分配。