HashMap
底层数据结构
基于Node类型的table数组。如下图:
如图所示,HashMap 底层是基于数组和链表实现的。其中有两个重要的参数:
- 容量
- 负载因子
容量的默认大小是 16,负载因子是 0.75,当 HashMap 的 size > 16*0.75 时就会发生扩容(容量和负载因子都可以自由调整)。
桶定为16是为了减少hash冲突、为实现 X & (2^n - 1) = X % 2^n
put方法
1.key哈希后,与HashMap长度-1位运算得到下标i=(n - 1) & hash
2.检查talbe数组是否初始化,没有进行resize()
3.i处为null,新增一个Node节点
4.其他链表(传入的key重复定位到同一个index)和红黑树操作(链表长度超过TREEIFY_THRESHOLD -1)
5.检测是否需要扩容