Hash函数:JDK的经典hash函数
简单解读,待扩展。。。
int hash(Object key) {
int h = key.hashCode();
return (h ^ (h >>> 16)) & (capitity -1); //capicity表示散列表的大小,最好使用2的整数倍
}
大槽位
capitity=16777216;key=11146485;hashCode[简单取余](可变)
1010 1010 0001 0100 1111 0101 h=11146485
0000 0000 0000 0000 1010 1010 >>>16
1010 1010 0001 0100 0101 1111 ^ //高低位数据权重保留
1111 1111 1111 1111 1111 1111 (capitity -1)=16777215
1010 1010 0001 0100 1111 0101 &结果===11146485//高低位数据的变化影响都有保留,尽可能地离散
小槽位
capitity=32;key=21;hashCode[简单取余]
0000 0000 0001 0101 h=21
0000 0000 0000 0000 >>>16
0000 0000 0001 0101 ^ 21//不改变低位数据权重
0000 0000 0001 1111 (capitity -1)=31
0000 0000 0001 0101 &31结果===21
附:
进制转换 - 在线工具