HashMap的hash算法记录

2022-05-04  本文已影响0人  不知不怪

学习手写hashmap时发现他的算法是

    public int hashCode(K key) {
        if (key == null)
            return 0;
        int h = key.hashCode();
        h = h ^ (h >>> 16);
        return h;
    }

于是好奇的打开源码

image.png
原来jdk就是这样写的,接下来再看open-jdk17也是这样写的
image.png
那它为啥要这样写呢,参考了一位大神的解释
https://blog.csdn.net/bingshangdeqiji/article/details/105092989

首先java中int是32位的,如果一个数是:
01101010101010101010101010111110
右移16位意味首什么呢?
00000000000000000110101010101010
其实就是把高16位移到低16位,再和原值按位异或
这样得到的一个新值做的hashmap的hash值。

\color{red}{其目的就是为了把高16位的变化传递给低16位让这个hash值不会过于集中,更为分散。}

更详细解释大家可自行阅读源码中的注释。


image.png
上一篇 下一篇

猜你喜欢

热点阅读