put()方法
- 计算key的hash值
- 通过hash值找到对用的下标
- 如果该下标不为空,检查是否有重复的 key 存在,如果有则覆盖(hash相同,key相同==、equals)
- 不存在重复的 key,将此 entry 添加到数组中
(1) 检查扩容:已经达到了阈值 && 位置已经有元素
a. 扩容:新建一个数组,长度是原来的2倍
b. 转移:rehash把原数组元素放入到新数组中
(2) 插入新值(1.7头插法)
get()方法
- 计算key的hash值
- 通过hash值找到对用的下标
- 通过下标找到链表,遍历链表找到对应的值(hash相同,key相同==、equals)
多线程问题:rehash时会产生循环链表,导致get()方法出现死循环