哈希表: “多种数据结构的底层结构”

633 阅读1分钟

哈希表(Hash table,也叫散列表),是根据键(Key)而直接访问在内存储存位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表

哈希表示意图

  1. 左侧是我们要处理的内容
  2. 中间是散列函数,其作用是根据传进来的key,来生成一个index
  3. 右侧是一个数组,称之为散列表,其作用是存储内容。散列函数生成的index 就是散列表中存储内容的index(查询的时候根据index就能快速查到

  1. 当散列函数生成的index出现重复时,称为 哈希冲突。所以散列函数的质量,决定了整个哈希表的质量。

  2. 出现哈希冲突时,散列表就不能单纯的在index处存储key了,会在index出创建一个链表(拉链操作),key会依次存入到链表中。由于链表的查询时间复杂度为O(n),所以哈希表在最坏的情况下,查询的时间复杂度 = O(n)

哈希表的时间复杂度

/查询(最优)插入(最优)删除(最优)查询(最差)插入(最差)删除(最差)
Hash tableO(1)O(1)O(1)O(n)O(n)O(n)

哈希表与其他数据结构的关系

很多数据结构底层都采用了哈希表来时间,例如Java的Map 和 Dictionary

参考代码

最后有一段个人实现的代码,感兴趣的可以参考

链表:shimo.im/docs/D8GPdT…

哈希表:shimo.im/docs/Gdjg3C…