HashMap的特点

不重复指的是键不能重复
哈希表结构:
JDK8以前:数组 + 链表
JDK8开始:数组 + 链表 + 红黑树


-
Entry对象中添加的就是键和值,并利用键计算哈希值(跟值无关)
![image]()
-
再计算出在数组中应存入的索引。
![image]()
-
如果该位置是null,则直接添加
![image]()
-
如果该位置不为null,调用equals方法比较键的属性值
如果键的属性值相同,则会覆盖原有的Entry对象。
(put方法隐含的覆盖功能)
![image]()
![image]()
如果键的属性值不一样,则会添加新的Entry对象。JDK8以前,新的元素添加到数组当中,原先的会挂在新的下面形成链表
![image]()
JDK8开始,新的直接挂在老的下面形成链表
![image]()
-
当链表长度超过8并且数组长度>=64时,会自动转成红黑树
![image]()
![image]()
总结:











浙公网安备 33010602011771号