一、哈希表概述
1. 什么是哈希表

哈希表是一种基于数组的数据结构,用于快速地存储和查找数据。它通过一个哈希函数将元素的键值映射到哈希表中的一个位置,从而实现常数时间复杂度 O(1) 的查找和插入操作。
哈希表的基本工作原理如下:
- 键值对存储:每个元素都有一个'键'与其对应的'值'。
- 哈希函数:根据'键'计算出该元素的存储位置(哈希值)。
- 数组存储:将哈希值作为索引,快速存取对应的值。

2. 哈希表的优点
- 高效查找:对于随机访问、插入和删除操作,哈希表能提供接近 O(1) 的时间复杂度,这是因为它能直接通过哈希函数定位到元素的存储位置。
- 空间利用:哈希表通常比其他结构(如树)更节省空间,尤其是在大规模数据的存储上表现优秀。
3. 哈希表的缺点
- 内存浪费:为了避免冲突,哈希表通常需要较大的内存空间。
- 哈希冲突:当不同的键经过哈希函数计算后,映射到同一位置时,会发生哈希冲突,需要通过一定方法来解决。
二、哈希函数
哈希函数是哈希表的核心,它负责将输入的键值映射到一个固定范围内的哈希值。一个好的哈希函数应当具备以下几个特点:
- 均匀性:哈希值应均匀分布,避免集中在哈希表的某些区域。
- 效率:哈希函数应当简单、计算速度快。
- 低碰撞率:哈希函数应尽量减少哈希冲突的发生。
常见哈希函数
哈希函数的发展已经有很多年历史了,在前辈的实践之下,留下了这些常见的哈希函数。
1. 直接定址法(常用)
函数原型:HashI = A * key + B
优点:简单、均匀 缺点:需要提前知道键值的分布情况 适用场景:范围比较集中,每个数据分配一个唯一位置
2. 除留余数法(常用)

假设哈希表的大小为 m
函数原型:HashI = key % p (p < m)
优点:简单易用,性能均衡 :容易出现哈希冲突,需要借助特定方法解决 :范围不集中,分布分散的数据









