学习手写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值。
更详细解释大家可自行阅读源码中的注释。
image.png










网友评论