哈希表学习教程

什么是哈希表?

哈希表就像一个超级智能的储物柜系统!它能够根据物品的"标签"(键)快速找到对应的"物品"(值),而不需要一个个柜子去翻找。

学校储物柜

想象一下学校的储物柜:每个学生都有一个学号(键),对应一个储物柜(值)。 当你需要找某个学生的物品时,不需要一个个柜子去翻,而是直接根据学号找到对应的柜子。 哈希表就是这样工作的!

哈希表的基本结构

哈希表由三个主要部分组成:

索引
0
索引
1
索引
2
索引
3
索引
4
姓名
张三

三个重要部分:

  • 索引(Index):就像储物柜的编号,从0开始
  • 键(Key):用来查找的"标签",比如姓名、学号
  • 值(Value):实际存储的数据,比如个人信息

哈希函数:神奇的"计算器"

哈希函数就像一个神奇的"计算器",它能把任何输入转换成数字,然后告诉我们数据应该放在哪个位置。

简单的哈希函数例子

假设我们有一个简单的哈希函数:取名字的第一个字母的ASCII码,然后除以5取余数

• "张三" → '张'的ASCII码是243 → 243 ÷ 5 = 48余3 → 放在索引3
• "李四" → '李'的ASCII码是264 → 264 ÷ 5 = 52余4 → 放在索引4
• "王五" → '王'的ASCII码是295 → 295 ÷ 5 = 59余0 → 放在索引0

交互式演示

在下面的演示中,你可以输入姓名,看看它是如何被存储到哈希表中的:

请输入一个姓名,然后点击"添加到哈希表"按钮,看看它是如何被存储的!

哈希冲突:当两个名字"撞车"了

有时候,不同的键经过哈希函数计算后,会得到相同的索引位置。这就叫"哈希冲突"。

停车场比喻

就像停车场里,两个不同的车牌号经过某种计算后,都指向同一个停车位。 这时候就需要想办法解决这个冲突,比如:

开放地址法:找下一个空的停车位
链地址法:在同一个位置放多个停车位
再哈希法:用另一个计算方法重新计算

哈希表 vs 其他数据结构

特性 哈希表 数组 链表
查找速度 非常快 (O(1)) 快 (O(1)) 慢 (O(n))
插入速度 非常快 (O(1)) 快 (O(1)) 快 (O(1))
删除速度 非常快 (O(1)) 慢 (O(n)) 慢 (O(n))
内存使用 较多 中等 较少
有序性 无序 有序 有序

哈希表在生活中的应用

手机通讯录

用姓名作为键,电话号码作为值,快速查找联系人

购物车

用商品ID作为键,商品信息作为值,快速管理购物车

游戏存档

用玩家ID作为键,游戏数据作为值,快速加载存档

网页缓存

用网址作为键,网页内容作为值,提高网页加载速度

总结

哈希表的核心优势:

  • 查找效率高:平均时间复杂度为O(1),查找速度极快
  • 插入删除快:添加和删除数据也非常迅速
  • 灵活性强:可以用任何不可变类型的数据作为键
  • 空间换时间:用更多内存换取更快的操作速度