❒ HashMap源码分析-常见属性
// 数组默认的初始容量
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
// 数组最大长度
static final int MAXIMUM_CAPACITY = 1 << 30;
// 负载因子
static final float DEFAULT_LOAD_FACTOR = 0.75f;
// 树化阀值
static final int TREEIFY_THRESHOLD = 8;
// 反树化阀值
static final int UNTREEIFY_THRESHOLD = 6;
// 最小树化容量
static final int MIN_TREEIFY_CAPACITY = 64;
transient HashMap.Node<K,V>[] table
transient int size;
扩容阈值 == 数组容量 * 加载因子 = 16 * 0.75 = 12
✔ HashMap是懒惰加载,在创建对象时并没有初始化数组
✔ 在无参的构造函数中,设置了默认的加载因子是0.75
✔ 链表长度阈值:当单个桶中的链表长度达到8时(数组长度大于等于64),该链表会被转换为红黑树。
✔ 最小树化容量:HashMap的总容量(桶数组大小)必须至少为64。如果容量小于64,即使链表长度达到8,也不会进行树化,而是会选择扩容。