`
youngphy
  • 浏览: 26109 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

hashmap源码阅读

 
阅读更多
泛泛读过几次,整体设计思路也大体了解,但长久不接触,触及一些细节代码时,还是陷入了思考泥潭,反省,应该存在细节盲点,又从整体和细节仔细品味了一番,记录。

    static int hash(int h) {
        // This function ensures that hashCodes that differ only by
        // constant multiples at each bit position have a bounded
        // number of collisions (approximately 8 at default load factor).
        h ^= (h >>> 20) ^ (h >>> 12);
        return h ^ (h >>> 7) ^ (h >>> 4);
    }

单看hash方法很难理解,需要一起看indexFor方法,也就是hashmap的定位bucket方法。
    static int indexFor(int h, int length) {
        return h & (length-1);
    }
为了追求快,hashmap的size为2的次方,定位因此可以简单高效地用位与运算,但些方法带来一个内部问题,对于超出length的hashcode, 高位不参与定位,所以所有高位相同的对象会被indexFor定位到一个bucket, hash方法的目的就是把高位的影响弄到低位,让高位也参与到定位,解决不至于所有低位相等的对象分到同一个bucket。

核心设计思路:hash要尽量均匀的打散数据分布。无论从应用层还是核心层。
碰撞概率大的话,hash不均,造成局部数过多,hash效率有O(n)的趋势。
虽然应用层出现低位相等,高位不同的对象的概率不大,但从架构层面上考虑,需要解决所有问题,你不能保证这种小概率事件不会出现,需要解决这种小概率事件,这就是hash方法的作用。
分享到:
评论

相关推荐

    一个delphi的hashmap源代码

    在IT行业中,哈希表(HashMap)是一种高效的数据结构,它使用哈希函数将键(Key)映射到数组的特定位置,以便快速存取数据。...通过阅读和分析源代码,我们可以学习如何在实际项目中应用哈希表,提高数据操作的效率。

    HashMap源码深度剖析.md

    HashMap源码深度剖析,面试必备

    HashMap源码(JDK1.7,含注释)

    HashMap源码(JDK1.7,含注释)

    HashMap源码(上)

    HashMap的部分源码解析

    1.6 hashmap源码

    hashmap源码,可以看看http://blog.csdn.net/wabiaozia/article/details/50684556

    HashMap之resize()方法源码解读.docx

    HashMap之resize()方法源码解读 HashMap的resize()方法是HashMap中最核心的方法之一,该方法负责扩容HashMap的容量,以便存储更多的键值对。下面我们将对HashMap的resize()方法进行源码解读,了解其扩容机制和原理...

    HashMap源码流程图

    HashMap源码流程图 一图解析HashMap源码流程 // 默认的HashMap中数组的长度 16 static final int DEFAULT_INITIAL_CAPACITY = 1 ; // aka 16 // HashMap中的数组的最大容量 static final int MAXIMUM_CAPACITY = 1 ...

    JDK7HashMap源码

    精确的版本号是jdk-7u80。想不通,竟然很多人都收费,这个明明可以在安装JDK的目录中找到啊!自己下一个JDK就可以得到。

    hashMap1.8源码

    HashMap是Java编程语言中最常用的集合类之一,它提供了一种基于键值对(key-value pair)的数据存储方式,具有高效查找、插入和删除操作。...对于学习者来说,阅读源码并结合实践是掌握HashMap的最好方式。

    HashMap源码分析

    HashMap 是 Java 中最常用的集合类之一,它是基于哈希表实现的,提供了高效的数据存取功能。HashMap 的核心原理是将键(key)通过哈希函数转化为数组...理解HashMap的内部机制对于优化代码性能和避免潜在问题非常重要。

    JDK8HashMap源码

    精确的版本号是jdk-8u181。想不通,竟然很多人都收费,这个明明可以在安装JDK的目录中找到啊!自己下一个JDK就可以得到。

    java代码-使用java解决手写hashMap的源代码

    java代码-使用java解决手写hashMap的源代码 ——学习参考资料:仅用于个人学习使用!

    HashMap jdk1.8源码阅读.md

    本人源码阅读理解, 基于jdk1.7 和jdk 1.8的java HashMap源码的理解, 希望对你理解java源码有作用

    面试必考之HashMap源码分析与实现

    在Java编程语言中,HashMap是集合框架中一个重要的类,用于存储键值对的数据结构。面试中,HashMap的源码分析与实现是一个常见的考察点,...深入学习和实践HashMap源码,能够帮助我们更好地理解和优化Java应用程序。

    hashmap实现原理

    哈希映射(HashMap)是Java编程语言中广泛使用的...了解这些实现细节对于优化代码性能和避免潜在问题至关重要。在实际编程中,应充分考虑哈希冲突的处理、负载因子的选择以及预估容量的设定,以提高HashMap的使用效率。

    易语言源码易语言HashMap类源码.rar

    在给定的压缩包“易语言源码易语言HashMap类源码.rar”中,包含了易语言实现的HashMap类的源代码。HashMap是一种常见的数据结构,在许多编程语言中都有实现,它提供了快速的键值对存储和查找功能。 HashMap类是基于...

    HashMap源码阅读

    本文将深入探讨HashMap的源码,解析其内部实现机制,包括底层数据结构、哈希冲突解决、1.7和1.8版本的区别、扩容机制以及红黑树的左右旋操作。 首先,HashMap的底层数据结构是一个动态调整大小的位桶数组(bucket ...

Global site tag (gtag.js) - Google Analytics