美文网首页
HashMap原理

HashMap原理

作者: leoryzhu | 来源:发表于2019-05-01 00:36 被阅读0次

    图解HashMap(一)

    笔记:

    HashMap是由数组和链表组合构成的数据结构,Java8中链表长度超过8时会把长度超过8的链表转化成红黑树;存取时都会根据键值计算出"类别"(hashCode),再根据"类别"定位到数组中的位置并执行操作。

    hashCode是一个对象的标识,Java中对象的hashCode是一个int类型值。通过hashCode来指定数组的索引可以快速定位到要找的对象在数组中的位置,之后再遍历链表找到对应值,理想情况下时间复杂度为O(1),并且不同对象可以拥有相同的hashCode。

    在数组大小不变的情况下,存放键值对越多,查找的时间效率会降低,扩容可以解决该问题,而负载因子决定了什么时候扩容,负载因子是已存键值对的数量和总的数组长度的比值。默认情况下负载因子为0.75,我们可在初始化HashMap的时候自己修改。

    put(K key, V value) 主流程:

    步骤①.根据键值key算出hash值 — > hash(key)

    步骤②.根据hash值和当前数组的长度计算在数组中的索引 — > indexFor(hash, table.length)

    步骤③情况1.hash值和key值都相同,替换原来的值,并将被替换的值返回。

    步骤③情况2.坑位没人或发生hash碰撞 — > addEntry(hash, key, value, i)

    相关文章

      网友评论

          本文标题:HashMap原理

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