hashMap中定义了一系列变量,我们先来解读一下hashMap中定义的几个变量的含义
// 这是hashMap的默认容量,必须为2的幂,至于为什么是2的幂,后面我们会提,默认是16
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
// 这是容量的最大值,容量不能超过这个值
static final int MAXIMUM_CAPACITY = 1 << 30;
// 默认加载因子,表示hash允许的饱和程度
static final float DEFAULT_LOAD_FACTOR = 0.75f;
// 链表树化阈值,我们都知道hashmap中链表过长会向红黑树转化,这个值表示当链表长度超过时就会向红黑树转化
static final int TREEIFY_THRESHOLD = 8;
// 链表过长会向红黑树转化,同理,树的长度过短也会向链表转化,这个值就表示当红黑树长度向链表转化的最小长度
static final int UNTREEIFY_THRESHOLD = 6;
// 最小树化数组长度,看过一部分源码的都会觉得链表长度大于8时就会向红黑树转化,实则不然,有一个前提条件,就是数组长度要大于一个阈值
// 这个值就表示链表向红黑树转化时数组的最小长度
static final int MIN_TREEIFY_CAPACITY = 64;
public V put(K key, V value) {
return putVal(hash(key), key