哈希表(Hash Table),也叫散列表,是一种通过键(Key)直接访问值(Value) 的数据结构,核心是利用哈希函数将键映射到表中的特定位置(哈希地址),实现高效的插入、查找和删除操作。
1. 核心组成
- 哈希函数(Hash Function):将任意长度的键(如字符串、数字)转换为固定长度的索引(哈希地址),决定值在表中的存储位置。
示例:存储学生信息(键为学号 2024001 ),哈希函数可设为 学号 % 100 ,则该学生信息存放在索引 1 的位置。
- 哈希表(Hash Table):本质是数组(或数组+链表/红黑树),用于存储键值对,数组下标即哈希函数计算出的哈希地址。
- 键值对(Key-Value Pair):哈希表的存储单元,通过Key唯一标识,Value是实际存储的数据。
2. 核心操作(时间复杂度)
理想情况下(无哈希冲突),所有操作均为 O(1),这是哈希表的最大优势。
- 插入(Insert):用哈希函数计算Key的哈希地址,将键值对存入该地址。
- 查找(Search):计算Key的哈希地址,直接访问该地址获取Value。
- 删除(Delete):计算Key的哈希地址,移除该地址的键值对。
3. 关键问题:哈希冲突
定义:不同的Key通过哈希函数计算出相同的哈希地址(如 2024001 和 2024101 ,经 %100 后均得到 1 )。
解决方法:
- 链地址法(常用):哈希表每个位置存储一个链表(或红黑树),冲突的键值对依次存入链表,查找时遍历链表匹配Key。
- 开放地址法:若地址冲突,按固定规则(如线性探测:冲突后检查下一个地址)寻找下一个空地址存储。
4. 应用场景
- 存储键值对数据:如Python的 dict 、Java的 HashMap 底层实现。
- 缓存系统:快速查找缓存数据(如浏览器缓存)。
- 去重操作:如统计数组中不重复元素(通过Key唯一性判断)。
- 哈希集合(HashSet):仅存Key,用于快速判断元素是否存在(本质是值为 None 的哈希表)。
242 用长度为26的数组 cnt 统计字符串 s 中各字母出现次数(对应位置加1),再统计字符串 t 中各字母出现次数(对应位置减1),最后判断数组 cnt 所有元素是否都为0,若都为0则 s 和 t 是字母异位词。
349 先把数组 nums1 转成集合 set1 去重,再遍历数组 nums2 ,将 nums2 中存在于 set1 的元素加入新集合 set2 ,最后把 set2 转成列表返回,这样就得到了两个数组的交集。
350 用 Counter 统计 nums1 中各数字的出现次数,然后遍历 nums2 ,当数字在 cnt 中还有剩余次数时,将其加入结果列表,并减少该数字在 cnt 中的次数,最后返回结果列表,得到两个数组的交集。
642

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



