基于JDK1.8
/**
* 单继承多实现,继承了他的抽象父类AbstractMap<K,V>
* 实现了Map<K,V>为了一些通用操作
* 实现了Cloneable为了复制,这里是浅复制,原值改变复制出来的值也会变
* 实现了Serializable为了持久化
* */
public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable {
//序列号
private static final long serialVersionUID = 362498820763181265L;
//默认初容量始
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;
//链表节点数大于8个链表转红黑树
static final int TREEIFY_THRESHOLD = 8;
//链表节点小于6个链表转红黑树
static final int UNTREEIFY_THRESHOLD = 6;
//当容量大于等于64的时候才触发链表转红黑树
static final int MIN_TREEIFY_CAPACITY = 64;
//以Node数组存储元素,长度为2的次幂
transient Node<K,V>[] table;
//具体元素存放集
transient Set<Map.Entry<K,V>> entrySet;
//存放的元素的个数,数组加链表一共
transient int size;
//每次扩容和更改map结构的计数器,源码中有特定的地方触发
transient int modCount;
//临界值 = 容量 * 扩容因子
int threshold;
//扩容因子,默认值是0.75,可以在构造器中自定义
final float loadFactor;