diff --git a/docs/java/collection/HashMap.md b/docs/java/collection/HashMap.md index 716bb1f34a56cb4b0bde2867fc92dbf514b983b6..80cd8b571bcf916d6059553713f7472de33a28e1 100644 --- a/docs/java/collection/HashMap.md +++ b/docs/java/collection/HashMap.md @@ -56,7 +56,7 @@ static int hash(int h) { 所谓 **“拉链法”** 就是:将链表和数组相结合。也就是说创建一个链表数组,数组中每一格就是一个链表。若遇到哈希冲突,则将冲突的值加到链表中即可。 -![jdk1.8之前的内部结构](https://user-gold-cdn.xitu.io/2018/3/20/16240dbcc303d872?w=348&h=427&f=png&s=10991) +![jdk1.8之前的内部结构](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-7/jdk1.8之前的内部结构.png) ### JDK1.8之后 相比于之前的版本,jdk1.8在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间。 @@ -170,7 +170,9 @@ static final class TreeNode extends LinkedHashMap.Entry { ``` ## HashMap源码分析 ### 构造方法 -![四个构造方法](https://user-gold-cdn.xitu.io/2018/3/20/162410d912a2e0e1?w=336&h=90&f=jpeg&s=26744) + +HashMap 中有四个构造方法,它们分别如下: + ```java // 默认构造函数。 public HashMap() { @@ -237,9 +239,7 @@ HashMap只提供了put用于添加元素,putVal方法只是给put方法调用 - ①如果定位到的数组位置没有元素 就直接插入。 - ②如果定位到的数组位置有元素就和要插入的key比较,如果key相同就直接覆盖,如果key不相同,就判断p是否是一个树节点,如果是就调用`e = ((TreeNode)p).putTreeVal(this, tab, hash, key, value)`将元素添加进入。如果不是就遍历链表插入(插入的是链表尾部)。 - - -![put方法](https://user-gold-cdn.xitu.io/2018/9/2/16598bf758c747e6?w=999&h=679&f=png&s=54486) +![put方法](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-7/put方法.png) ```java public V put(K key, V value) {