final Node<K,V>[] resize()
resize() 方法的作用是对哈希表进行初始化或者扩容。
final Node<K,V>[] resize() {
Node<K,V>[] oldTab = table;
int oldCap = (oldTab == null) ? 0 : oldTab.length;
int oldThr = threshold;
int newCap, newThr = 0;
// 对原table的「容量oldCap」、「阈值oldThr」状态进行判断,并确定新 table 的「容量 newCap」、「阈值 newThr」
// 原 table 「容量」大于 0
if (oldCap > 0) {
// 若 oldTab 的「容量oldCap」大于最大值
if (oldCap >= MAXIMUM_CAPACITY) {
threshold = Integer.MAX_VALUE; // 将「阈值oldThr」设置为整数最大值
return oldTab; // 直接返回
}
// 若 oldTab 扩容后的「容量newCap」仍在合理范围内且不小于默认的初始容量
else if ((newCap = oldCap << 1) < MAXIMUM_CAPACITY &&
oldCap >= DEFAULT_INITIAL_CAPACITY)
newThr = oldThr << 1; // double threshold // 将「阈值oldThr」扩大一倍得到 「newThr」
}
// oldTab「容量oldCap」等于 0,但是「阈值oldThr」大于 0
// (table 容量小于0会抛出异常的,所以一定是等于0)
else if (oldThr