Loading

java容器(1)——hashmap

对哈希的理解
哈希算法
冲突的处理
哈希冲突无法避免
一个好的哈希算法应该有什么特性?
尽可能分散…

 

Jdk8的hashmap 初始长度16
懒加载机制,第一次put数据才才创建

数组+链表+红黑树
每个数据单元是一个node结构{
key、
value、
next、
hash字段(不是key的哈希值,是该哈希值的高16位 异或 低16位){
哈希寻址
Hash&(length-1)

}
}
next:当前桶位的字段与冲突node连成一个链表要用的字段

负载因子:
默认:0.75
计算扩容阈值 16*0.75=12

链表转化为红黑树的条件:
链表长度达到8、当前散列表的长度达到64
否则链表长度达到8只会进行一次resize,散列表扩容

hashmap用put写数据的几种情况
1.Hashcode&(length-1) 计算slot下标
Slot==null
slot!=null 未链化 比较key,看是不是同一个node,不是则用尾插法成链
slot!=null 链化 迭代查找node,没有查找到,追加,判断有没有到树化的条件
slot!=null 树化

红黑树
插入

posted @ 2022-05-14 20:37  VinCinx  阅读(24)  评论(0编辑  收藏  举报