试着Java HashMap通过查看代码来了解我的工作.添加元素时,会发生以下情况:
int indexOf(int h, int length) {
return h & (length-1);
}
Run Code Online (Sandbox Code Playgroud)
我无法理解indexOf方法中的技巧.有人能解释一下吗?
谢谢.
这是因为Java HashMaps总是有一个容量,即桶的数量,作为2的幂.让我们使用256的容量,即0x100,但它可以使用2的任何幂.从2的幂的功率减去1按位所需的精确位掩码 - 并使用散列来获取正确的存储区索引,范围0为length - 1.
256 - 1 = 255
0x100 - 0x1 = 0xFF
Run Code Online (Sandbox Code Playgroud)
例如,257(0x101)的散列以0xFF逐位进行,以产生1的桶数.
| 归档时间: |
|
| 查看次数: |
3509 次 |
| 最近记录: |