本质来说是一个node[]
结构:
默认0.75的负载因子,意思是超过容量3/4的时候,会对数组进行扩容
数组默认长度 1<<4 无符号右移4位, 10000 16
一个单向链表 node 内部类
tableSizeFor 找到当前cup最接近的 2的次幂
putval(){
if(数组为空): resize() 初始化数组为默认长度
if(判断hash是否存在) 不存在就添加新节点
else 存在的情况
–判断key的hash && key的equals key与第一个节点相同则覆盖
–是树,给树添加节点
–是链表, 循环, 有相同key==下一个是空的 就给下一个节点 赋值 , 判断是否转成树 ,
没相同的返回 只有这两种返回方式
判断 k 有没有被赋值 有的话证明key有相同 , 换值,返回旧的值
判断resize
}
resize(){
//待定
}
为什么说hashmap不安全,以及concurxxxhashapr如何解决
-
数据安全问题
比如计算了一个相同的位置,又进行了并发的put ,会导致数据覆盖,或是链表中下一个节点的引用覆盖, concurxxxhashapr 使用了cas解决 -
while 死循环的问题