Java面经——HashMap

HashMap详解

一 映射

1. hash

在取模运算之前,先将hashcode进行一次hash。该函数的作用是通过异或将hashcode的高位和低位混合,使得低位的随机性增大,让数据元素更加均衡的分布,减少碰撞

1
2
3
4
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
2. 取模

然后进行取模:hash & (length - 1)

为什么是 & ?: 当length是2的n次方时,hash % length 等于 hash & (length - 1)。

二 扩容机制