在学习HashMap源码之前,先看看HashMap中的成员变量是非常重要的,有助于我们后面查看源码时的理解,
HashMap中的成员变量如下:

// 默认初始容量(数组默认初始化大小)
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // 16
// 最大容量
static final int MAXIMUM_CAPACITY = 1 << 30; //
// 默认的负载因子(在对map进行扩容时需要负载因子进行计算)
static final float DEFAULT_LOAD_FACTOR = 0.75f;
// 桶的树化阈值:即 链表转成红黑树的阈值,在存储数据时,当链表长度 > 该值时,则将链表转换成红黑树
static final int TREEIFY_THRESHOLD = 8;
// 桶的链表还原阈值:即 红黑树转为链表的阈值,当在扩容(resize())时(此时HashMap的数据存储位置会重新计算),在重新计算
// 存储位置后,当原有的红黑树内数量 < 6时,则将 红黑树转换成链表
static final int UNTREEIFY_THRESHOLD = 6;
// 最小树形化容量阈值:即 当哈希表中的容量 > 该值时,才允许树形化链表 (即 将链表 转换成红黑树)
// 否则,若桶内元素太多时,则直接扩容,而不是树形化
// 为了避免进行扩容、树形化选择的冲突,这个值不能小于 4 * TREEIFY_THRESHOLD
static final int MIN_TREEIFY_CAPACITY = 64;
// 数组(不能被序列化)
transient Node<K,V>[] table;
// 所有的键值对集合(不能被序列化)
transient Set<Map.Entry<K,V>> entrySet;
// map中键值对的个数(不能被序列化)
transient int size;
// 操作map的总的次数(不能被序列化)
transient int modCount;
// 下一个要调整大小的大小值(容量*负载系数)
int threshold;
// 哈希表的负载因子。
final float loadFactor;