心得

来源:互联网 发布:淘宝消费者服务电话 编辑:程序博客网 时间:2024/04/28 15:29

1. HashMap中的hash计算方式(为什么)

减少hash是的碰撞

2. 下表查找(和hash值的关系)

hashcode ^ (hashcode >>> 16),让低16位同时包含了高位和低位的信息,在计算下标时,由于高位和低位的同时参与,减少hash的碰撞。

(n - 1) & hashCode:n - 1 使得低位全为1,高位全为0,位与之后的结果一定在0 ---> n-1范围内


发展过程:

1. put到HashMap中的Object,我们视为它合理的实现了hashCode方法,该方法可以达到良好的散列效果,即碰很少重复

2. 既然hashCode合理,我们就可以考虑用它来散列(分桶)对象

3. 由于需要将对象散列到一定编号范围的捅中(0 -- n),由于n(表大小)是2的整数次方,可以采用n-1和hashcode按位与,得到的结果是在桶范围内,上述我们是hashCode为散列良好的,所以(n -1)&hashCode的计算结果可视为应该分布均匀的。

4. 上述有一个问题,(n -1)&hashCode的计算方式中,假设n=16,那么hashCode其实只有低4位参与了计算,为了进一步降低碰撞的发生,hashCode的计算方式改为了hashcode ^ (hashcode >>> 16),使得低位中同时包含了低位和高位的信息。


======================================================================================================================================