HashMap是面试中经常问到的一个知识点,也是判断一个候选人基础是否扎实的标准之一,因为通过HashMap可以引出很多知识点,比如数据结构(数组、链表、红黑树)、equals和hashcode方法。
默认大小、负载因子以及扩容倍数
底层数据结构
如何处理hash冲突
如何计算key的hash值
数组长度为什么是2的幂次方
查找、插入、扩容过程
1.数据结构
- JDK1.8:HashMap有数组+链表+红黑树构成
- 当一个值需要存储到HashMap的时候,根据Key来计算出他的Hash值,通过Hash来存储到数组的位置。如果发送Hash冲突就以链表形式存储;Hashmap会把这个链表转换成红黑树类存储;
- 如图所示
2.HashMap基本属性
Table数组存储着Node对象,Node是HahsMap的内部类,表示一个Key-Value
HashMap数据结构总结
为什么table数组永远是2的幂次方
答:HashMap通过一个tableSizeFor确保数组长度永远是2的幂次方
什么地方使用到了tableSizeFor
答:构造方法中调用threshold(容量阈值)
HashMap:查找
HashMap:插入
HashMap:删除
Equals和HashCode