page contents

HashMap 的 put 方法的执行过程?

轩辕小不懂 发布于 2022-01-19 15:19
阅读 406
收藏 0
分类:Java开发
2925
Nen
Nen
- 程序员

当我们想往一个 HashMap 中添加一对 key-value 时,系统首先会计算 key 的 hash 值,然后根据 hash 值确认在 table 中存储的位置。若该位置没有元素,则直接插入。否则迭代该处元素链表并依次比较其 key 的 hash 值。如果两个 hash 值相等且 key 值相等(e.hash hash && ((k = e.key) key ||

key.equals(k))),则用新的 Entry 的 value 覆盖原来节点的 value。如果两个 hash 值相等但 key 值不等 ,则进行插入操作。

不过呢,插入操作在 JDK1.7 和 JDK1.8 是有所不同的,JDK1.7 底层采用数组+链表,插入时采用头插法,JDK1.8,底层采用数组 + 链表 / 红黑树,并且把头插法改成了尾插法,主要是为了减少线程安全的问题,另外,当链表长度大于8,且数组长度大于64时,会把链表转化为红黑树处理,这个时候,就无关是头插还是尾插了,得按照红黑树的规则来插了。

请先 登录 后评论