HashMap
哈希表
核心: 基于哈希值的桶和链表
优点: 查询速度快,平均时间复杂度 O(1)
缺点: 哈希碰撞
Java 1.7 HashMap
实现: 数组+链表
初始化:
-
容量参数 必须为 2的幂 (默认:16) ,否则会被转换为2的幂。
为了
length-1
的低位都为1,便于进行&
运算取出hash
返回值的低位 -
负载因子 默认 0.75f
扩容条件: 元素数量 >= 容量×负载因子 且 当前位置元素不为空
扩容倍率: 2倍
链表插入方式: 头插法
缺点: 容易发生死锁等
Java8 HashMap
实现: 数组+链表+红黑树
初始化:
首次调用 put
方法时创建数组
结构转换:
size >=8 链表 → 红黑树 且 数组 length>=64;
size <=6 红黑树 → 链表;
待完善。。。。。