【发布时间】:2016-09-25 08:35:13
【问题描述】:
我正在阅读有关 Scala 中不可变集合的底层数据结构(更准确地说是HashMap 和 Vector),在阅读代码时,我遇到了 HashTrieMap 中的 get0 函数。
为什么变量 index 与 0x1f 再次在第 312 行进行 AND 运算?在我看来,结果是相同的(即第二个 AND 不是必需的)。我错过了什么?
这里是前面提到的函数:
override def get0(key: A, hash: Int, level: Int): Option[B] = {
val index = (hash >>> level) & 0x1f // index is AND-ed with 0x1f
val mask = (1 << index)
if (bitmap == - 1) {
elems(index & 0x1f).get0(key, hash, level + 5) // once again, AND-ed with 0x1f
} else if ((bitmap & mask) != 0) {
val offset = Integer.bitCount(bitmap & (mask-1))
elems(offset).get0(key, hash, level + 5)
} else
None
}
【问题讨论】:
标签: java scala hashmap immutability trie