hashmap的底层数据结构:
数组+链表+红黑树
hashmap长度默认为16,如果放在重复的地方,会以单向链表大方式向下存储(默认长度为8),超过长度会转换为红黑树(平衡二叉树)
落点=》 hashcode 的来源: 调用obeject的hashcode的方法%16
(n-1)&hash == hash%16 , (n-1)&hash的性能更好
hash 高16位于低16位进行^运算,保证最后6位于15的二进制进行&运算。(让平均取到0-15的概率大致相等(分散性))
节点存储:
判断位置,长度,数组的值是否已经存在,是否是红黑树,然后正常添加链表数据,超过8的长度转为红黑树。
数组=》链表=》红黑树
链表太长,消耗查找时间
怎么保证hashmap线程安全?
资料参考: