# 哈希表的概念
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。(copy 自百度百科)
在实际的开发中,我们并不需要真正的去编写哈希函数,不会去实现关键字到地址的映射,或者知道怎么去处理哈希冲突这类操作。
每当存储的每一个关键字,表中就会多加入用相应的内容,因此增加一条映射空间复杂度计为O(1)
;每次我们对数据的访问是一次直接的常数运算,因此时间复杂度计为O(1)
。
因为哈希表的查找非常快速,所以在实际开发中我们经常用它空间换时间(现在的计算机的性能都非常可观的,因此,我们会更加追求程序的运行速度)降低程序的时间复杂度。比如我们会根据数据的唯一性标识建立映射关系,后面在需要用到这个数据的时候,直接用它的唯一性标识从哈希表中读取。
# 实际开发中的哈希表
在 JS 中,我们的对象本身就是一个哈希表,因此经常我们可以在代码中看到这样的代码.
const map = Object.create(null);
在 JS 中,使用对象做哈希表存在一个问题,只能使用字符串
或者Symbol
作为key
。
ES6 中引入了两个新的结构,Map
和WeakMap
,可以支持任意类型做 key
。关于 ES 的语法的问题,我们不在这儿细讲,后面会在专门的专题细讲。
关于哈希表没有什么特别多的概念可讲,因此,哈希表这一章节,我们主要是阐述其应用。