Hashmap-put()
2021-12-11 13:55:33 17 举报
JDK1.8 Hashmap
作者其他创作
大纲/内容
resize()
1.7 中 hashmap是数组+链表的形式,添加的链表时候是添加到头部(为了快)
若当前hash一致,key一致
yes
直接插入tab[i]= newNode
no
若当前节点为空
链表节点
遍历链表,找尾节点并开启计数器
donothing
开始解决冲突过程
Start
树节点
转化红黑树
最后检查键值对的个数
nothing
1.8 中 hashmap是数组+链表+红黑树的形式,添加的链表时候是添加到尾部(为了计数),当链表计数器大于8时候,链表会转红黑树,当红黑树计数器小于6时候(2层),又会转回链表
并将插入操作标记设置位true
判断节点类型
则使用新节点覆盖当前节点
核心函数
hash(key){ return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);}// obj.hashCode() 返回的是对象存储地址// 通过自身与自身右移16位后的数字取\"异或\"运算的结果,作为新hash值,目的是使得散列更散
resize()既提供了扩容的功能,其实也是初始化懒加载的过程
尾部插入新节点
基础数组大小大于64
threshold
获取数组的目的下标 i =( n-1)&hash获取对应的元素节点p=tab[i]
若tab==nul或 n=0
遍历过程中如果key一致
结束
声明tab= table,n= tab.length
put(Key,Value)
尝试插入新的红黑树节点
检查计数器大于8
0 条评论
下一页