# 哈希表的概念

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。(copy 自百度百科)

在实际的开发中,我们并不需要真正的去编写哈希函数,不会去实现关键字到地址的映射,或者知道怎么去处理哈希冲突这类操作。

每当存储的每一个关键字,表中就会多加入用相应的内容,因此增加一条映射空间复杂度计为O(1);每次我们对数据的访问是一次直接的常数运算,因此时间复杂度计为O(1)

因为哈希表的查找非常快速,所以在实际开发中我们经常用它空间换时间(现在的计算机的性能都非常可观的,因此,我们会更加追求程序的运行速度)降低程序的时间复杂度。比如我们会根据数据的唯一性标识建立映射关系,后面在需要用到这个数据的时候,直接用它的唯一性标识从哈希表中读取。

# 实际开发中的哈希表

在 JS 中,我们的对象本身就是一个哈希表,因此经常我们可以在代码中看到这样的代码.

const map = Object.create(null);

在 JS 中,使用对象做哈希表存在一个问题,只能使用字符串或者Symbol作为key

ES6 中引入了两个新的结构,MapWeakMap,可以支持任意类型做 key。关于 ES 的语法的问题,我们不在这儿细讲,后面会在专门的专题细讲。

关于哈希表没有什么特别多的概念可讲,因此,哈希表这一章节,我们主要是阐述其应用。