HashMap底层原理
不怕慢,就怕站
一点一点改变自己!
展开
-
HashMap扩容原理
1.为什么需要扩容??? 为了解决哈希冲突导致链化影响查询效率问题,扩容会缓解该问题。 加载因子是0.75, 扩容的时候创建一个更大的数组,循环遍历处理原来数组里的数据。 第一种情况:当前桶位只有一个元素,从未发生过碰撞,这种情况直接计算出当前元素存放在新数组中的位置,然后扔进去就可以了。 第二种情况:当前节点已经树化(暂不介绍) 第三种:桶位已经形成链表,低位链表存放在扩容之后的下标位置,与当前数组的下标位置一致。高位链存放在当前数组下标位置+扩容之前的数组长度。以初始容量16的为例,扩容一倍.原创 2020-07-08 22:40:05 · 717 阅读 · 0 评论 -
HashMap存储底层原理
hashMap底层是用散列表存储的,就是一个数据组,每个数组位置数据多的时候以链表的形式存储,jdk8当链表长度达到8的时候,并且总元素个数到达64,链表会变为红黑树存储。1.6以前是头插入,1.8是尾插入法。 put 值的时候HashMap才会进行初始化,属于延迟加载,获取key值的hash值,经过扰动函数(这里的扰动函数是hash值&hash值无符号右移16位,让高位充分参与运算)使得hash值更散列,然后构造出node对象 node包括 hash值 、key、value、 next ..原创 2020-07-08 21:44:07 · 248 阅读 · 0 评论