本文由图雀社区认证作者 神奇的程序员 写作而成,图雀社区将连载其前端学习数据结构与算法系列,点击阅读原文查看作者的掘金链接,感谢作者的优质输出,让我们的技术世界变得更加美好????
哈希的概念
哈希是由键 (key) 和值 (value) 组成的数据。
存储数据
例如,将图中所示数据,存储到哈希表中:
准备数组:声明长度为5的数组:
尝试把Joe存进去:
使用哈希函数 (Hash) 计算 Joe 的值,即字符串 "Joe" 的哈希值。得到的结果是 4928:
将得到的哈希值处以数组的长度 5,求得其余数。这样的操作叫 "mod运算"。此处mod的运算结果为 3:
将 Joe 进行 mod 运算的值作为数组下标,放进数组里:
重复上述步骤,即可往哈希表中添加数据、
存储冲突
当元素进行 mod 运算后,可能会与其他元素的 mod 值一样,此时数组中已经有其他元素占了这个下标位置,这种存储位置重复了的情况便叫做 冲突,我们来看个例子:
使用链表解决冲突问题
遇到存储冲突问题时,可使用 链表[1] 在已有数据的后面继续存储新的数据,也称之为链地址法。
例如,Nell 的 mod 结果为1,此时下标为1的地址中已经有了Sue元素,此时使用链表在Sue后面添加Nell即可。
查询数据
将要查询的key使用哈希函数计算出哈希值,进行mod运算,得出的结果即当前要查询key在