HashMap数据结构简介
HashMap底层是用数组+链表的数据结构实现的,产生hash碰撞的少,也就是产生链表少和链表中元素少,则查询效率高,达到O(1)复杂度。
HashMap常见面试点及原理
- HashMap在添加元素发生hash碰撞时,链表是采用头插入还是尾插入?
在jdk1.7采用的是头插入,jdk1.8采用的是尾插入 - HashMap默认加载因子为什么是0.75?
jdk源码有注释,若加载因子过小,空间无法得到充分利用,若过大,则容易产生hash碰撞,产生链表,导致查询效率低下,通过统计学规律及折中和权衡,选择0.75比较合适 - 加粗样式HashMap底层数组长度为什么是2的n次幂?**
因为HashMap为元素找位置,即indexFor方法,将hash和数组长度取模运算是通过将数组长度减一和元素hash值按位与运算,不是2的n次幂,就不能用这种方法取模;减少hash冲突,读者可以拿数组长度是8和9,两个元素的hash值分别是3和2,推算一下以证明