数据结构
- 在 JDK1.8 中,HashMap 是由
数组+链表+红黑树
构成 - 当一个值中要存储到HashMap中的时候会根据Key的值来计算出他的hash,通过hash值来确认存放到数组中的位置,如果发生hash冲突就以链表的形式存储,当链表过长的话,HashMap会把这个链表转换成红黑树来存储
在看源码之前我们需要先看看一些基本属性
//默认初始容量为16
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;
//默认负载因子为0.75
static final float DEFAULT_LOAD_FACTOR = 0.75f;
//Hash数组(在resize()中初始化)
transient Node<K,V>[] table;
//元素个数
transient int size;
//容量阈值(元素个数超过该值会自动扩容)
int threshold;
table数组里面存放的是Node对象,Node是HashMap的一个内部类,用来表示