HashMap扩容原理
2020-08-05 14:08:42 35 举报
扩容
作者其他创作
大纲/内容
节点加在hihead链表尾部
lohead放在原索引位置上
判断(e.hash & oldCap) == 0
true
HashSet实现了Set接口并且内部封装了一个HashMap,add()方法中调用了HashMap的put方法,存的是(key,present)键值对,present是一个static final修饰的object对象。特点:无序和没有重复元素;无序是计算索引使用的是散列函数。无重复是因为HashMap对于key相同的元素会覆盖掉value。
当前位置只有一个节点
判断当前节点类型
节点加在lohead链表尾部
判断两条链表长度是否小于等于6
旧数组节点处理完毕
按红黑树节点处理
threshold = Integer.MAX_VALUE
遍历旧数组中的元素
oldCap >= MAXIMUM_CAPACITY
两倍扩容,阈值也扩容两倍
TreeNode
newTab[e.hash & (newCap - 1)] = e计算新数组中的索引位置
false
红黑树退化成链表
hihead放在原索引+oldCap位置上
遍历链表节点
resize()
判断++size > threshold
遍历红黑树节点
HashMap
ListNode
0 条评论
回复 删除
下一页