哈希表是一种使用哈希函数组织数据的数据结构,它支持快速插入和搜索。

哈希表(又称散列表)的原理为:借助 哈希函数,将键映射到存储桶地址。更确切地说,

首先开辟一定长度的,具有连续物理地址的桶数组

当我们插入一个新的键时,哈希函数将决定该键应该分配到哪个桶中,并将该键存储在相应的桶中

当我们想要搜索一个键时,哈希表将使用哈希函数来找到对应的桶,并在该桶中进行搜索。
散列表的简介 - 图1

负载因子


负载因子 又叫装填因子,是哈希表的一个重要参数,它反映了哈希表的装满程度。

实际利用桶的个数 与 桶的总数 的比值,称为负载因子。在这个实例中,负载因子太小甚至接近于 0,这样的方案显然是不现实的。

比较合理的负载因子是 0.7,如果数据量是 7,则会创建 10 个桶,以此类推。随着插入的数据量的增加,计算机会逐渐增加桶的个数,并选择合适的哈希函数,使得数据经过映射之后能均匀地分布在桶中。
**

哈希函数

哈希函数是哈希表中最重要的组件,用于将键映射到特定的桶。在上一篇文章中的示例中,我们使用 y = x % 5 作为散列函数,其中 x 是键值,y 是映射之后对应的桶的索引。

一个好的哈希函数,应当具备以下几个特点:

  • 哈希函数的键与桶的对应关系具有确定性。也就是说,对于 key 所映射的桶地址,只由 key 键本身决定,而不由其他因素决定;

  • 哈希函数不应太过复杂。太过于复杂的哈希函数将导致计算桶地址不能快速完成,从而无法快速定位桶;

  • 映射结果的分布应具有均匀性。对于特定的桶空间,我们应尽量保证数据经过哈希函数映射之后,能够均匀地分布在桶的整个地址空间中。