目录

对象与哈希表的区别

哈希值的方法

运用的场景

场景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. 使用eclipse生成javadoc的方法
  2. android短信安全,[原创]分析了一款android短信木马
  3. python3键盘事件_python+selenium3 鼠标事件和键盘事件
  4. 硅谷历史_使其新颖:硅谷设计的历史
  5. java线程——详解Callable、Future和FutureTask
  6. Navicat的使用,连表查询,python代码操作sql语句
  7. 使用LIstView和自定义Adapter完成列表信息显示
  8. java声明接口_为什么必须用Java声明接口?
  9. canvas瓦片图加载
  10. 单片机毕业设计不用愁!!30篇单片机毕业设计参考案例
  11. 基于stm32单片机外文文献_13个基于STM32的经典项目设计实例,全套资料~-嵌入式系统-与非网...
  12. 数据结构:八大数据结构分类
  13. 用泰勒级数展开证明欧拉公式
  14. hishop6.0和易分销2.0数据库迁移手册
  15. shell脚本实现从master节点批量配置salve节点(主机名有瑕疵,IP映射,ssh服务)
  16. uniapp开发-公众号h5、小程序、移动app
  17. 获取cookies(pyppeteer)
  18. 最大子矩阵和问题java_最大子矩阵
  19. linux0.11内核完全剖析 - ll_rw_blk.c
  20. QQ注册页面(完整版)

热门文章

  1. 什么是总资产(亿)?
  2. 计算机向用户传递计算 处理结果的设备,计算机向用户传递计算、处理结果的设备是()...
  3. 苹果原壁纸高清_动漫壁纸 | 玩具总动员潮图手机壁纸
  4. (Modern Family S01E04) Part 5
  5. win10清理网上邻居密码
  6. win32学习之路(六)
  7. 平板电脑什么牌子好 多场景智慧生活由它展开
  8. amdintel服务器性能差异,高频比多核重要?浅析为何AMD游戏性能干不过Intel
  9. 微信小程序bindtap和carchtap的区别
  10. 查看、替换回车换行符