底层原理: 数组table +链表多个Node节点,+红黑数
加载因子:0.75
数组初始长度:16
//转换为红黑数的阀值 大于等于8就转
static final int TREEIFY_THRESHOLD = 8;
节点数据结构:
get方法遍历:
//扩容 resize 翻倍
12<< 1=24
//核心算法.
p = tab[i = (n - 1) & hash] //为什么这样写?
----->> 1. (n - 1) & hash n - 1 是数组table的index 取&结果永远不会大于 参与运算的最小的值.也就是不会地址越界.
2.按位操作效率更高,并不等于求余,而是随机数的感觉
//^ 异或 相同取0,不同取1 h>>> 右移16位
//由put方法可以看出,数组并不是每个index下都会有值,也不是连续存放的,所以叫散列. 某个节点(数组的某个index)下的Node链表长度大于等于8时,转换为红黑树.