目录

对象与哈希表的区别

哈希值的方法

运用的场景

场景1:数组去重

场景2:统计字符串中不同字符出现的次数

场景3:输出两个数组的交集,输出结果中的每个元素一定是 唯一 的


哈希表的定义

哈希表,也叫散列表,是可以根据关键码值(key)而直接进行访问访问的数据结构。它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。在JavaScript中,对象就跟哈希表很相似

对象与哈希表的区别

  • 对象的键值必须是字符串,而哈希可以是任意值
  • 对象中的键值是无序的,而哈希是有序的
  • 对象中的键值个数需要手动去获取,而哈希可以直接获取到键值个数
  • 哈希可以比对象多存储50%的键值对

哈希值的方法

set方法,用于给键值赋值

let hash = new Map()hash.set(bob, true) // Map(1) {bob => true}

get方法,获取某个键值对应的映射数据,返回数据

let hash = new Map()hash.set(bob, true) // Map(1) {bob => true}hash.get(bob) // truehash.get(2) // 获取不存在键值的数据会返回undefined

has方法,判断是否存在某个键值,返回布尔值

hash.has(bob) // truehash.has(89) // false

delete方法,删除键值

hash.delete(1) // 删除已有键值对

size属性, 获取哈希表键值对数量

hash.size // 2

运用的场景

场景1:数组去重

// 哈希表实现数组去重
/*** @param {Array[]} oldArr* @return {Array[]}*/
var uniq = function (oldArr) {// 增加代码的健壮性if (!oldArr || !oldArr instanceof Array ) {oldArr = []}let hash = new Map()let newArr = []for (let i = 0; i < oldArr.length; i++) {if (!hash.get(oldArr[i])) {newArr.push(oldArr[i])hash.set(oldArr[i], 1)}}return newArr}

场景2:统计字符串中不同字符出现的次数


/*** @param {string} str* @return {Map}*/var statistics = function (str) {if (!str.length) {return }let hash = new Map() // 分割字符串为数组let tempArr = str.split('')for (let i = 0; i < tempArr.length; i++) {// 设置每个键值的映射数值,存在则+1,不存在则设置为1hash.set(tempArr[i], (hash.get(tempArr[i]) || 0) + 1)}return hash}let str = 'abbbbcccccddddd'statistics(str) // Map(4) {'a' => 1, 'b' => 4, 'c' => 5, 'd' => 5}

场景3:输出两个数组的交集,输出结果中的每个元素一定是 唯一 的

/*** @param {number[]} nums1* @param {number[]} nums2* @return {number[]}*/
var intersection = function(nums1, nums2) {if (nums1.length === 0 || nums2.length === 0) {return []}if (nums1.length < nums2.length) {const temp = nums1;nums1 = nums2;nums2 = temp}let hasSet = new Set(nums1)let resSet = new Set()for (let i = 0; i < nums2.length; i++) {hasSet.has(nums2[i]) && resSet.add(nums2[i])}return Array.from(resSet)
}; 

【数据结构】什么是哈希表?如何运用于前端项目,算法实践相关推荐

  1. 数据结构实验:哈希表

    数据结构实验:哈希表 题目描述 在n个数中,找出出现次数最多那个数字,并且输出出现的次数.如果有多个结果,输出数字最小的那一个. 输入 单组数据,第一行数字n(1<=n<=100000). ...

  2. j - 数据结构实验:哈希表_一看就懂的数据结构基础「哈希表」

    哈希表 哈希表(Hash table),是存储键值(Key Value)对数据的一种数据结构. 例如,我们可以将人的名字作为键,性别作为值来存储.通过把键映射到表中的一个位置来访问数据,以提高查找速度 ...

  3. 数据结构 链式哈希表(Hash Table)的接口定义与实现分析(完整代码)

    链式哈希表的接口定义 关于哈希表与链式哈希表的描述可以参阅:http://www.cnblogs.com/idreamo/p/7990860.html 链式哈希表的操作与属性有:初始化.销毁.插入元素 ...

  4. 数据结构学习笔记 哈希表(一) 哈希表基础与哈希函数

    ------HR:The first question is what you do if you have a conflict with your manager ? ------You:Hash ...

  5. 内核数据结构之认识哈希表

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

  6. JavaScript数据结构之 —— 08哈希表

    散列算法(也就是哈希)的作用是尽可能快地在数据结构中找到一个值.在之前如果要在数据结构中获得一个值(使用get方法),需要遍历整个数据结构来找到它. 所有元素根据和该元素对应的键,保存在数组的特定位置 ...

  7. C - 数据结构实验:哈希表

    Description 在n个数中,找出出现次数最多那个数字,并且输出出现的次数.如果有多个结果,输出数字最小的那一个. Input 单组数据,第一行数字n(1<=n<=100000). ...

  8. 学习数据结构笔记(8) ---[哈希表(Hash table)]

    B站学习传送门–>尚硅谷Java数据结构与java算法(Java数据结构与算法) 一般在java程序访问数据库时都会安排从内存的缓存层中取数据;之前的做法是自己写个哈希表,实现对数据的缓存. 哈 ...

  9. 数据结构基础(18) --哈希表的设计与实现

    哈希表 根据设定的哈希函数 H(key)和所选中的处理冲突的方法,将一组关键字映射到一个有限的.地址连续的地址集 (区间) 上,并以关键字在地址集中的"映像"作为相应记录在表中的存 ...

最新文章

  1. SparkSQL 与 Spark Core的关系
  2. 查看电脑python虚拟环境-手把手教你在Linux系统下使用Python虚拟环境
  3. jQuery学习入门总结之css()和addClass()的不同
  4. Timer组件的使用
  5. pytorch实战案例-手写数字分类-卷积模型——深度AI科普团队
  6. 07.配置日志的存储路径、设置日志的格式
  7. 语句乎?表达式乎?(Python/C)
  8. android opengl美颜功能,Android 关于美颜/滤镜 利用PBO从OpenGL录制视频
  9. NOI2010:航空管制(拓扑排序 + 思维)
  10. 两种方法解决Undefined symbol SystemInit问题
  11. Banner 怎么实现轮播不同尺寸的图片
  12. 使用 kubeadm 初始化 worker节点出现 not ready 故障
  13. 介绍分享几款免费的在线Web文件管理器
  14. 区块链与能源互联网的碰撞
  15. MySQL适合运行在Docker中吗?
  16. 未来可能发生的十大颠覆性科技创新
  17. 3D模型文件--STL,OBJ,3DS
  18. 《角斗士》一个帝国的史诗绝唱
  19. 抖音无水印视频爬虫(二)——爬虫的实现
  20. Matlab中legend的用法总结

热门文章

  1. 使用mybatis-plus时,自定义SQL分页查询
  2. 16个方法让男人显得更年轻
  3. flowable 6.X在线中文文档
  4. 升级win10后更新bootcamp的方法
  5. 华为交换机查看端口相关信息常用命令
  6. vue表单验证的完整步骤
  7. git 删除分支文件 删除分支
  8. 如何进行有效的人效管理
  9. 连接Windows服务器出现Credssp错误的解决方法
  10. 联通 SIGP 手机短信接口标准