我对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
,其分别由一个和两个长材,备份,避免了需要分配额外的阵列包他们。