我對BitSet
瞭如指掌。 BitSet
數據結構是否存儲1和0?'BitSet'是否存儲位或整數?
val b = BitSet(0, 2, 3)
表示存儲1位位置0,2和3?
如果是這樣,什麼是最大值。沒有。的位,32或64?
我對BitSet
瞭如指掌。 BitSet
數據結構是否存儲1和0?'BitSet'是否存儲位或整數?
val b = BitSet(0, 2, 3)
表示存儲1位位置0,2和3?
如果是這樣,什麼是最大值。沒有。的位,32或64?
位集是一組被表示爲打包成64位字中的位的 可變大小的數組非負整數的。存儲器 bitset的佔用空間由存儲在 中的最大號碼決定。
鑑於有添加和刪除Int
S中的API交易,那麼我們有理由相信,可設置的最大位是最大的整數,即2^31-1
。綜觀the source爲scala.collection.immutable.BitSet
,還有也不允許負整數的斷言(根據上面的描述,這使得有義):
def + (elem: Int): BitSet = {
require(elem >= 0, "bitset element must be >= 0")
Scala中的一個BitSet
被實現爲Array[Long]
,其中每個比特信號的存在數組中的數字。在Scala中(在JVM上),Long
是64位。一個這樣的Long
可以存儲0到63的值,下一個在64到127之後,等等。這是可能的,因爲我們只談論正數,並且不需要考慮符號。
鑑於你例如:
BitSet(0, 2, 3)
我們可以將所有這些數字存儲單個Long
,這在二進制將裏面:
1101
由於我們在0到63的範圍內,這可以在單個Long
值上運行。
一般來說,斯卡拉BitSet
中存儲的上限或最大值是Int.MaxValue
,意思是2^31-1
(2147483647)。爲了存儲它,你需要2147483647/64
「位」代表數字,這是〜= 33554432多頭。這就是爲什麼在大量數據中存儲大量數據會花費相當大的代價,並且當您處理大約數百個數字時,這通常是一個建議。
作爲邊注,immutable.BitSet
具有Scala中的一個特殊實現(BitSetLike
性狀),即BitSet1
和BitSet2
,其分別由一個和兩個長材,備份,避免了需要分配額外的陣列包他們。