哈希表
1、作用:
用来快速判断一个元素是否出现在集合中,可以将查找元素的复杂度从O(n)降低到O(1).
2、哈希映射
(1)对于每一个给定的关键字key值,通过哈希函数映射 f(key) 之后,就可以得到一个在哈希表M中 记录该关键字的地址。
(2)通常的操作:
key % (总长度) = 哈希表M中的位置
每个关键字key对应的位置是固定的
(3)<font color="red"存储的数据结构
在python中,其实就是一个字典。
将每个元素都对应一个序号,构成key-value的形式,存在字典中。关键字key的值是元素,经过哈希表映射之后得到的位置是value的值。
当需要查找元素的时候,直接利用dict[key] = value 的形式就可以找到。
3、解决哈希碰撞问题
常用的解决方案有散列法和拉链法。散列法又分为开放寻址法和再散列法
4、哈希表的优势
(1)在列表查找中,使用最广泛的二分查找算法,复杂度为O(log2n),但其始终只能用于有序列表。普通无序列表只能采用遍历查找,复杂度为O(n)。
(2)拥有较为理想的哈希函数实现的哈希表,对其任意元素可以直接通过计算获取位置,查找速度始终为常数级,即O(1)。
5、js中哈希表的实现
js中只有Map,没有HashMap。HashMap只是map的一种底层实现方式。
// 创建一个Map对象
var map = new Map();
// 可以用数组当中的下标作为key,也可以用值作为key
// 检查key是否存在
map.has(key);
// 通过key取对应的value
map.get(key);
// 删除
m.delete('Adam');
// 添加
m.set('Adam', 67);
6、哈希表的空间消耗
使用哈希表的时候,需要用到栈,所以空间复杂度为O(n)