散列表的作用:

散列表一般用于键值对应的存储要求,如果需要一个元素对应另一个元素,最有效的方式就是利用散列表作为数据存储方式。

散列表的具体实现方式:

python的字典,java的hashmap,其实都是散列表。而散列表的根源,是一个数组。

散列函数:

散列函数是一类函数,输入时任何一种元素,输出时一个数字。

散列函数总是将同样的输入映射到相同的索引。

散列函数需要将不同的输入映射到不同的索引。

散列函数只返回有效的索引。

所以,散列表内部的原理是一个散列函数。

散列表具备的特点:

由于散列函数的特点,可以知道如果需要查找一个元素对应的值,那么散列表的查询时间复杂度是O(1)

可是现实中很难做到这点,要做到这点,对散列表有如下要求:

良好的散列函数作为内核

较低的装填因子

装填因子:散列表包含的元素数量/位置总数
包含的元素数量,可以理解为散列表具体有多少个键值对,位置总数,可以理解为散列表提供了多少空间(数组大小)来储存键值对
这里别忘了:我在散列函数的特点钟说,散列函数需要将不同的输入映射到不同的输出,但不是一定,算法很难做到这点,有时候会有多个输入对应一个输出,叫做冲突,此时装填因子>1

散列表的应用有:

一切需要键值对应的存储要求的需求

大部分需要应对数据冲突的要求,散列表可以简便实现

缓存:为了提高一个网站的访问速度,一些网站把不同的子站点页面数据存储起来,并用散列表对应,在用户需要时候直接发给用户,而不是重新生成数据,这就叫做缓存