1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00

Merge pull request #2078 from Davin-Lee/patch-1

Update hashmap-source-code.md
This commit is contained in:
Guide 2023-07-13 23:41:29 +08:00 committed by GitHub
commit 1cb7d10ab0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -262,12 +262,8 @@ HashMap 只提供了 put 用于添加元素putVal 方法只是给 put 方法
1. 如果定位到的数组位置没有元素 就直接插入。
2. 如果定位到的数组位置有元素就和要插入的 key 比较,如果 key 相同就直接覆盖,如果 key 不相同,就判断 p 是否是一个树节点,如果是就调用`e = ((TreeNode<K,V>)p).putTreeVal(this, tab, hash, key, value)`将元素添加进入。如果不是就遍历链表插入(插入的是链表尾部)。
![ ](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-7/put方法.png)
![ ](https://qingcheng-davin.oss-cn-shenzhen.aliyuncs.com/put.png)
说明:上图有两个小问题:
- 直接覆盖之后应该就会 return不会有后续操作。参考 JDK8 HashMap.java 658 行([issue#608](https://github.com/Snailclimb/JavaGuide/issues/608))。
- 当链表长度大于阈值(默认为 8并且 HashMap 数组长度超过 64 的时候才会执行链表转红黑树的操作,否则就只是对数组扩容。参考 HashMap 的 `treeifyBin()` 方法([issue#1087](https://github.com/Snailclimb/JavaGuide/issues/1087))。
```java
public V put(K key, V value) {