HashMap原理

写在前面:本着学习分享的动机去写的这篇文章,如果叙述不对,望各位大佬悉心指教。

1.为什么使用HashMap?
数组,查询慢,插入修改快。链表,查询慢,插入修改快。但是我们能不能可以整合两者的优势呢?HashMap就是一个很好的例子,数组(线性查找)+链表(寻址修改)的散列桶。还有就是HashMap是同步的(synchronized),所以很快。HashMap可以有null值。
2.HashMap工作原理
map.put(key,value)过程解析:


image.png

1)对Key求Hash值,计算出下标。
2) 如果发生碰撞了,以链表的方式插入到后面。
3)如果链表长度超过阀值( TREEIFY THRESHOLD==8),就把链表转成红黑树,链表长度低于6,就把红黑树转回链表
4)如果节点已经存在就替换旧值
5)如果桶满了(容量16*加载因子0.75),就需要 resize(扩容2倍后重排)

     map.get(key)过程解析:
image.png

文章参考:https://baijiahao.baidu.com/s?id=1618550070727689060&wfr=spider&for=pc

你可能感兴趣的:(HashMap原理)