1. 数组 + 链表方式存储
1. 默认容量: 16(2^n 为宜,若定义的初始容量不是 2^n,容量会定义为大于该初始容量的最小 2^n)
- 例如:初始容量为 13,则真正的容量是 16.
1. put:
1. 索引计算 : ((key.hashCode() ^ (key.hashCode() >>> 16)) & (table.length - 1))
1. 在链表中查找,并记录链表长度,若链表长度达到了 TREEIFY_THRESHOLD(8),则将该链转成红黑树。
1. 若在链表中找到了,则替换旧值,若未找到则继续
1. 当总元素个数超过容量*加载因子时,扩容为原来 2 倍并重新散列
- (元素的下标要么不变,要么变为【原下标+原容量】)。
1. 将新元素加到链表尾部
1. 线程不安全