HashMap介绍:
HashMap是基于哈希表的Map接口实现的,以Key-value对的形式存储, Key和Value都可为NULL,内容都是无序的,HashMap是非线程安全的
HashMap底层数据结构:
存储:
数组+链表+红黑树
扩容:
默认的一些设置:
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // 默认数组长度
static final float DEFAULT_LOAD_FACTOR = 0.75f; // 负载因子
static final int TREEIFY_THRESHOLD = 8; // 树化条件 (链表长度大于8, 并且数组长度等于64)
static final int MIN_TREEIFY_CAPACITY = 64;
static final int UNTREEIFY_THRESHOLD = 6; // 树退化 (成链表)条件
Ps.:
1. 当链表长度大于8, 但是数组长度<=64, 则会resize数组 (并且所有的元素都会rehash), rehash定位数组index的过程会进行位运算(e.g.: 31 & 32 = 0, 31 & 15 = 15)
2. 当链表长度大于8, 并且数组长度>64, 会树化
3. 单链表长度小于6, 红黑树会退化成链表