美文网首页
哈希表--一个神奇的东西

哈希表--一个神奇的东西

作者: tency小七 | 来源:发表于2018-06-12 16:26 被阅读0次
哈希表对于数组的操作是特别好用的!

因为js中的对象是基于哈希表结构的,而哈希表的查找时间复杂度为O(1),所以很多人喜欢用对象来做映射,减少遍历循环。

具体参见这篇博文
https://segmentfault.com/a/1190000007692754

简单点来说,我们举个例子:

在计算机中,是怎么存储数据的呢?
我们查找数据的时候,又是怎么查找的呢?

  • 计算机存储空间有两个属性:存储地址和所存储的值,机器可以根据给定的存储地址去读写该地址下的值。根据这种结构,假如我们将一块存储空间分成一个一个的格子,然后将这些数据依次塞到每个格子里,接下来我们就可以根据格子编号直接访问格子的内容了。这种方式就是数组(也叫线性连续表):数组头保存整个数组储存空间的起始地址,不同下标代表不同的储存地址的偏移量,访问不同下标所对应的地址就能实现数组元素的读写。所以,很自然就会想到将上述的键值对数据的key映射成数组下标,接着读写数组就变成了读写value值。将key的字符串转换成代表下标数值比较简单,可以用特定的码表(如ASCII)进行转换。

在js中有这样的一个对象,如下图所示:
将key值转换为ASCII值之后,


小明.png

那么下一个问题来了,就是如果按照他们的索引值,69存放小明;7存放18,10010存放176,那么从69到10010这么巨大的空间居然只存放了8个值,简直是极大的浪费啊!!!!!

所以我们的哈希算法出来了,如果用取模的方式,假设我们要求这些信息要在长度为10的空间里存放,那么name对应的value值可以存放在69%10=9这里,age对应的value值可以存放在7%10=7这里,那如果地址发生冲突了呢?

假设phone:138788中索引的ASCII值为89,89%10=9,与name所存放的地址重合了,怎么解决?

小明.png 索引.png

具体的还是要参考那篇博文哦!

相关文章

  • 哈希表--一个神奇的东西

    哈希表对于数组的操作是特别好用的! 因为js中的对象是基于哈希表结构的,而哈希表的查找时间复杂度为O(1),所以很...

  • redis数据结构--字典

    Redis的字典底层就是哈希表。 哈希表 首先给出哈希表的定义: 其中可以看到,table是一个哈希表节点的数组,...

  • Redis中的字典

    Redis中的字典 Redis中的字典使用哈希表作为底层实现,一个哈希表中可以有多个哈希表结点,而每个哈希表结点保...

  • Redis数据结构与对象——哈希

    1 字典的实现 Redis的字典使用哈希表作为底层实现,一个哈希表可以有多个哈希表节点,即每个哈希表节点就保存了字...

  • 4.字典

    字典 1. 字典的实现 Redis的字典使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表节点,每个哈希表节点...

  • Java数据结构_哈希表_基本概念

    本文目标 哈希表的基本概念,哈希冲突,哈希函数 什么是哈希表 哈希表也叫做散列表(hash有剁碎的意思)哈希表是空...

  • DPDK编程指南(翻译)( 十二)

    12.哈希库 DPDK提供了一个用于创建哈希表的哈希库,哈希表可以用于快速查找。哈希表是针对一组条目进行搜索而优化...

  • MIT算法导论七 哈希表

    - 哈希表- 哈希函数选择- 哈希碰撞 由“符号表问题”引入什么是哈希有一个表S有n条记录,每个记录(通常认为是指...

  • HashMap源码学习分析

    1.HashMap简介 HashMap核心是维护一张哈希表,这张哈希表是用一个Entry数组实现的。哈希表访问时,...

  • 数据结构 -- 哈希表及其应用

    这篇主要用来记录一下学习到的关于哈希表的知识点。 文章结构 哈希表 哈希表的定义 哈希表的优缺点 哈希碰撞 负载因...

网友评论

      本文标题:哈希表--一个神奇的东西

      本文链接:https://www.haomeiwen.com/subject/booleftx.html