解决哈希冲突有哪些方法?HashMap 为什么用拉链法?
先自己想一想,再看参考要点
参考要点
- 拉链法:落在同一个桶中的元素用链表连起来,查找时先算出桶下标,再在链表上顺序查找,耗时和链表长度成正比
- 开放定址法:冲突时按固定的规则在数组中找下一个空位,例如线性探测依次检查下一个位置,ThreadLocalMap 和 IdentityHashMap 使用这种方法
- 再哈希法:冲突时换一个哈希函数重新计算位置
- 开放定址法没有链表节点的开销,但装载因子必须较低,否则探测序列会很长,删除时也不能直接把位置置空,否则会截断其它元素的探测序列
- HashMap 用拉链法,装载因子可以达到 0.75,删除只需修改链表,冲突严重时链表还能转为红黑树