CS-Notes 学习笔记
Java 后端 · Java 容器

解决哈希冲突有哪些方法?HashMap 为什么用拉链法?

先自己想一想,再看参考要点

参考要点

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

学习站:先用面试题自评定级,按水平和面试日期排出每天的计划,自评过的题按间隔复习。免费、无需注册,记录只保存在自己的浏览器中。