HashMap存储步骤
底层实现
链表+数组+红黑树
链表与红黑树的转化
jdk8开始链表长度到8,数组长度超过64,链表转化为红黑树,长度小于6,红黑树转化为链表,元素内部以Node节点存在
存储步骤
1.计算key的hash值,二次hash然后对数组长度去博,对应到数组下标
2.如果没有产生hash冲突(下标位置没有元素),直接创建Node存入数组
3.如果产生hash冲突,先进行equals比较
相同,说明key相同,注入取代代替该元素
不同,则判断链表高度插入链表,链表高度达到8并且数组长度到64,转变为红黑树,长度地狱6将红黑树转化回链表
4.key为null,存在下标0的位置