HashMap
2022-02-27 01:14:08 5 举报
登录查看完整内容
为你推荐
查看更多
初始化和put
作者其他创作
大纲/内容
N
2
找到数组当前位置对应的链表,添加到链表的最后一位
Y
(p = tab[i = (n - 1) & hash]) == null数组当前位置没有元素
红黑树
next
!onlyIfAbsent || oldValue == null
最接近>=初始容量并且是2的幂等的数
添加到数组当前位置
new HashMap()负载因子默认0.75
3
替换掉原来的值,尾插钩子法,retrurn原来的值
默认16
数组容量达到阈值
resize()计算出阈值(容量*负载因子),并初始化一个大小是当前容量的数组
当前key重复(哈希、==、equals)
4
不替换原来的值
链表长度达到8
数据结构:数组+链表
将旧的数组中的值添加到新数组
转为红黑树
指定了初始容量?
1、2的幂等减1转为二进制都是1,&运算更快(比哈希%数组长度得到所在位置更快),且和其它值运算后的值重复率低,有效减少了哈希冲突2、&运算后可以是奇数、偶数,保证散列的均匀性,节约空间
第一次put
循环
1
0
容量
5 -> 88 -> 89 ->16
resize()计算出阈值(容量*负载因子),并生成一个大小是当前容量两倍的数组
为什么HashMap的容量是2的幂等?
0 条评论
回复 删除
下一页