-
hash算法优化
JDK1.8中源码如下:
static final int hash(Object key){
int h;
return (key == null)?0:(h == key.hashCode())^(h>>>16);
}
hashcodeyou右移16位并做异或操作
异或:相同为0,不同为1
假设有哦个key的hash值如下
【原hash值】1111 1111 1111 1111 1111 1010 0111 1100
【右移16位】0000 0000 0000 0000 1111 1111 1111 1111
【异或之后】1111 1111 1111 1111 0000 0101 1000 0011
可见高16位不变,用远hash值的高16位与低16位进行异或操作
hash算法优化处理的核心及意义:对每个hash值,在他的低16位中,让高16位进行异或操作,让他的低16位同时保持高16位的特征,尽量避免一些hash值后续出现冲突,导致进入数组中同一个位置的问题。(让后16位尽量不一致,如果一样,会导致其放入数组中间的同一个位置,进行复杂的hash冲突的处理)
-
寻址算法优化
(n-1)&hash 没有用hash值直接对数组长度进行取模,而是用hash值和数组长度-1进行与运算(&)
与运算(&):两位同时为1,结果才为1,否则为0
用与运算