本文是作者原创,版权归作者所有.若要转载,请注明出处.

话不多说,开始吧! 

我们知道,JDK1.7中  HashMap 采用的数据结构 = 数组 + 单链表

链表Entry

 

 

HashMap的常用属性

 

 

HashMap的构造方法

 

 

put方法(主)

 

 1.初始化

 

 1-1 将传入的容量转化为>传入容量大小的最小的2的次幂(详见位运算那篇文章)

 

 

2.key=null的处理(addEntry方法后面再说)

3.根据key计算hash值

 

 

4.根据hash值 获得 key在应存放的数组Table中位置

 

 

5.遍历该数组元素为头结点的链表,逐个判断该key对应的值是否已存在

 

 

6.添加一个元素

 

 

6-1.先判断容量是否足够,若容量不足,则进行扩容(2倍)

 

 

6-1-1.将旧数组上的键值对转移到新table中,从而完成扩容

 

 

6-2.添加一个新的元素到数组

 

 

get方法

 

 

1.key为null

 

 

2.key为其他元素

 

 

remove方法

 

细节如下:

 

 

 

至此,JDK1.7 HashMap源码分析,感谢观看


posted on 2020-09-01 23:10  路仁甲  阅读(399)  评论(0编辑  收藏  举报