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