哈希表允许您实现关联数组(字典)数据结构,插入、删除和搜索操作的平均性能为 O(1)。
下面是 NodeJS 中哈希映射的最简单实现的示例:
它是如何工作的?小心你的手:
- 哈希映射内部有一个数组
- 数组元素内部有一个指向链表第一个节点的指针
- 内存分配给指针数组(例如,65535 个元素)
- 它们实现了一个哈希函数,字典键是输入,在输出它可以做任何事情,但最终它返回数组元素的索引
录音的工作原理:
- 入口处有一对钥匙–值
- 哈希函数按键返回索引
- 通过索引从数组中获取链表节点
- 检查是否与key匹配
- 如果匹配,则替换该值
- 如果不匹配,则转到下一个节点,直到找到或找到具有所需键的节点。
- 如果仍未找到该节点,则在链表末尾创建该节点
按键搜索的工作原理:
- 入口处有一对钥匙–值
- 哈希函数按键返回索引
- 通过索引从数组中获取链表节点
- 检查是否与key匹配
- 如果匹配,则返回值
- 如果不匹配,则转到下一个节点,直到找到或找到具有所需键的节点。
为什么我们在数组中需要一个链表?由于计算哈希函数时可能发生冲突。在这种情况下,多个不同的键值对将位于数组中的同一索引处,此时将遍历链表来查找所需的键。
来源
https://ru.wikipedia.org/wiki/哈希表
https://www.youtube.com/watch?v=wg8hZxMRwcw
源代码
https://gitlab.com/demensdeum/datastructs