首先把那些恶心的变量解释一下
变量名称 | 含义 |
bincount | table里目标索引链表的元素个数 |
f | table里目标索引对应链表的头结点 |
n | table的长度 |
i | 目标索引 |
fh | 头结点f的哈希值 |
tab | table数组的副本 |
final V putVal(K key, V value, boolean onlyIfAbsent) {
//1、判断key是否为空
if (key == null || value == null) throw new NullPointerException();
//2、计算哈希值
int hash = spread(key.hashCode());
int binCount = 0;
//3、得到table的数组
for (Node<K,V>[] tab = table;;) {
Node<K,V> f; int n, i, fh;
//4.如果table数组为空,则初始化table
if (tab == null