Jdk7-HashMap源码流程图
2021-11-29 16:11:41 0 举报
Jdk7-HashMap源码流程图
作者其他创作
大纲/内容
遍历Entry链中每个元素
e!=null
返回旧值
table[i]=next;删除的是冲突链的第一个entry
hash&(table.length-1)相当于hash%table.length,使用&可以避免hash为负数
计算hash
判断长度是否超过阈值threshold
返回结果
resize
是
否
transfer
获取在table中的实际位置
定位桶并把元素放进去
prev.netx=next;
put
Entry e = table[hash&(table.length-1)]
remove(Object key)
找到相关的桶
remove
找到元素
结束
开始
key是否为空
getEntry(key)
table==null
获取当前节点的下一个节点
根据key计算hash
prev = e;e=next;
遍历table
选择合适的Hash因子
addEntry
获取老的数据以及容量
if (e.hash == hash && ((k = e.key) == key || (key != null && key.equals(k))))
get(Object key)
计算bucketIndex
获取新数组的容量
得到冲突链表pre
putForNullKey
遍历所有桶
removeEntryForKey
重新计算hash
依据equals()方法判断是否相等
new一个Entry数组
e=e.next
老的容量是否到了最大容量
修改 阈值
调用removeEntryForKey
分配空间
将老的表中数据拷贝到新的数组
根据key计算hash值
inflateTable
计算threshold
修改扩容阈值为整型最大值
取下一个元素
在对应位置插入相关元素(Entry)
是否有key==null
扩充capacity
size++
自动扩容原先长度*2
确保capacity一定是2的次幂
pre==e?
getForNullKey()
0 条评论
回复 删除
下一页