目录
二、哈希表的基本概念:不是 “存数据”,是 “给数据找位置”

一、引言
如果你用过手机里的联系人列表,一定有过这样的体验:想找 “张三” 的电话,不需要从 “A” 开头的名字一个个往下翻,直接在搜索框输入 “张三”,瞬间就能定位到他的联系方式 —— 这个 “秒查” 的背后,其实藏着一种高效的数据管理思路:通过一个 “关键词”(比如名字),直接找到目标信息的位置,不用逐个排查。
而在编程世界里,我们同样会遇到类似的需求:
1)记录学生的学号与成绩。
2)存储用户的账号与密码。
3)统计一篇文章里每个单词出现的次数。
如果用数组,想找某个元素得从头遍历,数据越多越慢;用链表,虽然插入删除方便,但查找效率依旧不尽如人意。有没有一种数据结构,能像查联系人那样,通过一个 “关键词” 直接 “跳” 到目标数据的位置,实现近乎 “瞬间查找” 的效果?
答案就是哈希表(Hash Table)。它既不是数组的 “升级版”,也不是链表的 “替代品”,而是一种把 “关键词” 和 “数据位置” 直接关联的聪明设计 —— 就像给每个数据都分配了一个 “专属门牌号”,只要知道门牌号(通过关键词计算得出),就能一步找到家。
接下来,我们就从哈希表的基本概念说起,聊聊它是怎么实现 “秒查” 的,遇到 “多个数据抢一个门牌号”(哈希冲突)时该怎么解决,以及数据存满了之后它如何 “扩容”。本文侧重点在于底层的原理,至于STL中的哈希表如何使用,这里就不做介绍了,可以在C++官网进行学习使用。
二、哈希表的基本概念:不是 “存数据”,是 “给数据找位置”
要理解哈希表,首先要跳出 “序列式容器” 的思维 —— 数组、链表、队列等序列式容器,是按 “插入顺序” 存储数据,访问时需按 “位置”(如下标、节点顺序)查找;而哈希表是关联式容器,核心是 “通过关键词(Key)关联数据(Value)”,存储和访问的逻辑都围绕 “Key” 展开。
以 STL 中的unordered_map为例,它的核心存储单元是<Key, Value>键值对,比如<学号"2024001", 成绩95>。哈希表的工作逻辑分两步:
- 算 “门牌号”

最低0.47元/天 解锁文章
1021

被折叠的 条评论
为什么被折叠?



