哈希表和散列表是一个东西,只是叫法不同而已。以下统一称呼为哈希表。
刚刚学习哈希表的时候,我其实对它的了解不是很深入,只知道它是一种key对应value的复杂数据结构。其实,哈希表包括的内容有很多。
哈希表是由哈希函数和数组组成的。
哈希函数用来产生 key值,它的主要功能是把输入映射到数字。通过哈希函数,可以把字符串或者其他类型的key值映射为数组的下标 index 。
哈希函数必须满足以下特征:
1、它必须是一致的。假设哈希函数的输入是 "apple"时得到的是4,那么每次输入"apple"时,得到的都必须是4.
2、它应将不同的输入映射到不同的数字。
通过哈希表,只要给出一个 key ,就可以高效的查找到它所匹配的value,时间复杂度接近O(1)。
总的来说:
哈希表也叫散列表,是存储key-value映射的集合。对于某一个key,哈希表可以在接近O(1)的时间内进行读写操作。哈希表通过哈希函数实现和Key和数组下标的转换,通过开放寻址法和链表法来解决哈希冲突。
在Python中,字典提供了哈希表的实现。
哈希表的使用:
1、哈希表可以用来进行查找,尤其是大海捞针式查找。
2、我们访问像http://adio.io这样的网址时,计算机必须将adit.io转化为ip地址。
如:adio.id ---> 173.255.248.55
这就是我们说的将网址映射到ip地址,这个过程在网络中被成为DNS解析。哈希表是提供这种功能的方式之一。
3、散列表还可以作用缓存。缓存是一种常用的加速方式,所有大型网站都是用缓存,而缓存的数据则存储在哈希表中。
哈希表的性能:
哈希表要避免冲突,需要有:
1、较低的填装因子;填装因子越低,发生冲突的可能性就越小,一般填装因子大于0.7时,就要调整哈希表的长度。
2、良好的哈希函数;
注:填装因子=哈希表包含的元素数 / 位置总数
填装因子度量的是哈希表中有多少位置是空的。