美文网首页
HashMap的hash算法记录

HashMap的hash算法记录

作者: 不知不怪 | 来源:发表于2022-05-04 11:36 被阅读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

相关文章

  • HashMap的hash算法记录

    学习手写hashmap时发现他的算法是 于是好奇的打开源码 原来jdk就是这样写的,接下来再看open-jdk17...

  • HashMap常见问题(更新中)

    HashMap //JDK1.8以后的HashMap部分源码 hash算法的优化: 对每个hash值,将他的高低十...

  • HashMap原理解析

    HashMap解析 HashMap的寻址算法优化 JDK1.8之后的hash运算 寻址算法 n 指的是数组的长度 ...

  • 深入解析HashMap那些不为人知的事

    HashMap 光从名字上应该也能猜到,HashMap肯定是基于hash算法实现的,这种基于hash实现的map叫...

  • Java 容器 --- HashMap分析

    HashMap部分源码 hash算法 可以看到hash算法计算分为三步 1.获得key的hash值2.在1的基础上...

  • HashMap的Hash算法

    HashMap定位 取key的HashCode值高位运算计算索引 求HashCode值 Integer: valu...

  • 目录【Java实习生准备】

    HashMap底层详解-001-数据结构、put、get HashMap底层详解-002-hash算法、长度的秘密

  • HashMap 分析 实现

    HashMap 这个集合经常用到的 首先什么是hash 写一个hash算法 第一步简单的hash 分析hash 就...

  • 基础问题

    HashMap的hash算法和寻址算法的优化 原hash值与右移后的hash值进行异或运算(一样就是0,不一样就是...

  • 【集合】Hashmap

    0.参考文献: hash算法 (hashmap 实现原理)Java实现的散列表 1.HashMap的数据结构 数组...

网友评论

      本文标题:HashMap的hash算法记录

      本文链接:https://www.haomeiwen.com/subject/ulpwyrtx.html