Java-HashMap.md 1.3 KB


title: HashMap 知识点 date: 2022-01-08 tags: Java categories: 面试


HashMap 知识点

1、 初始容量

 1. 初始大小16 ,扩容因子是0.75 ,比如16的大小,达到12就要扩容 
 2. 在new HashMap()如果设置默认大小,会在第一次put的时候进行设置容量大小

2、 数据结构

2.1、 各种map对比

Map 数据结构 描述
HashMap 数组+链表/红黑树 非线程安全
LinkedHashMap 数组+双向链表 非线程安全,有序
ConcurrentHashMap 数组+链表/红黑树 线程安全

2.2、 hash key 处理

 容量是2次幂,比如 一个16 的大小容量 在key 得到一个hashCode 后在进行 (16-1)& hashCode = index(存放的位置)
 位运算 15 的二进制 1111 位运算 就是相同位都是1 则为1 否则为0 比如 15 & 2 = 2 ,15 & 17 = 1

2.3、 链表和红黑树转换

 hash冲突当 链表数据达到8会转换成红黑树数据结构,当红黑树退到大小为6时转换成链表 红黑树(O(logN))

2.4、 线程安全ConcurrentHashMap

 ConcurrentHashMap 锁的维度是每个数组元素,每个entity都是用 volatile 进行修饰