BitSet
有一個stream()
方法,但它不像其他提供此方法的類型那樣實現Iterable
接口。這是否有特定的原因?爲什麼BitSet不可迭代?
回答
在BitSet
中沒有提供Iterable
(foreach
,iterator
和spliterator
)中的方法。 Iterable
中沒有stream()
方法。
另外的BitSet
的stream()
方法不返回在比特組的比特流,但在其值被設置中的比特的索引返回流(這是種混淆TBH)。因此,從技術上講,與Iterable
似乎幾乎沒有什麼共同之處。
大概是爲了避免昂貴的拳擊每一位到Boolean
實例。
使用其自己的API進行循環將避免所有分配。
可能是一個簡單的我猜 –
@fabienbk:不; Java不支持原始泛型。 – SLaks
拳擊布爾真的很便宜:只有兩個,他們被緩存。 'stream'返回表示設置的位索引的'int';我認爲OP期望'Iterable'執行相同的操作(除了'Integer')。 –
BitSet
不是java收集框架的「真實」成員,所以在技術上,不需要實現Collection.iterator()
並提供一個。
public class BitSet implements Cloneable, java.io.Serializable
更重要的是,兩者都是不合適的。
BitSet不是通用,不像java.util.Iterator;與Iterator不同,BitSet爲特殊方法提供了特殊功能,用於副作用和隨機尋址。
一個原因(不是全部原因,也許)是Iterable
效率低下,因爲位索引必須裝盒;該流可以使用原始整數。
如Javadoc中所述,有一種迭代比特集的有效方法,不需要使用Iterable
,所以它不是必需的。
- 1. 爲什麼「NoneType」不可迭代「錯誤,當我不迭代?
- 2. 爲什麼'model'對象不可迭代?
- 3. 爲什麼異常是可迭代的?
- 4. 爲什麼迭代器(.Net)在這段代碼中不可靠
- 5. 爲什麼迭代器不兼容?
- 6. 爲什麼我simple_fields_for不迭代
- 7. 爲什麼得到TypeError:'function'對象不可迭代?
- 8. 爲什麼我不能通過迭代器可變參考
- 9. 爲什麼「i,j = 1」導致「int ..不可迭代」?
- 10. 爲什麼這個向量迭代器不可遞增?
- 11. 爲什麼我得到'int'對象不是可迭代錯誤?
- 12. 爲什麼tf.Variable是可迭代的,但不能重複
- 13. 爲什麼for循環不需要迭代器是可變的?
- 14. 爲什麼std :: bitset :: at()拋出out_of_range?
- 15. 爲什麼我不能將逆向迭代器轉換爲向前迭代器?
- 16. 是什麼可迭代和ImmutableJS集合
- 17. BitSet的值是什麼?
- 18. 將迭代計算轉換爲迭代器 - 這叫做什麼?
- 19. 爲什麼列表迭代比矢量迭代C++
- 20. 爲什麼這段代碼不會迭代reducer值兩次?
- 21. 爲什麼JsArrayString沒有實現迭代?
- 22. 爲什麼我們需要scalaz.stream迭代?
- 23. 爲什麼這個迭代器是const?
- 24. 爲什麼這readlines()和迭代工作?
- 25. 爲什麼這個封閉在迭代
- 26. 爲什麼yield會返回迭代器?
- 27. 爲什麼std :: pair沒有迭代器?
- 28. 爲什麼PHP有迭代器對象?
- 29. 爲什麼Pandas默認迭代DataFrame列?
- 30. 爲什麼這個迭代div兩次?
哦,好點。我會編輯我的問題。 –