【数据结构】什么是哈希表?如何运用于前端项目,算法实践
目录
对象与哈希表的区别
哈希值的方法
运用的场景
场景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)
};
【数据结构】什么是哈希表?如何运用于前端项目,算法实践相关推荐
- 数据结构实验:哈希表
数据结构实验:哈希表 题目描述 在n个数中,找出出现次数最多那个数字,并且输出出现的次数.如果有多个结果,输出数字最小的那一个. 输入 单组数据,第一行数字n(1<=n<=100000). ...
- j - 数据结构实验:哈希表_一看就懂的数据结构基础「哈希表」
哈希表 哈希表(Hash table),是存储键值(Key Value)对数据的一种数据结构. 例如,我们可以将人的名字作为键,性别作为值来存储.通过把键映射到表中的一个位置来访问数据,以提高查找速度 ...
- 数据结构 链式哈希表(Hash Table)的接口定义与实现分析(完整代码)
链式哈希表的接口定义 关于哈希表与链式哈希表的描述可以参阅:http://www.cnblogs.com/idreamo/p/7990860.html 链式哈希表的操作与属性有:初始化.销毁.插入元素 ...
- 数据结构学习笔记 哈希表(一) 哈希表基础与哈希函数
------HR:The first question is what you do if you have a conflict with your manager ? ------You:Hash ...
- 内核数据结构之认识哈希表
关于哈希表 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射 ...
- JavaScript数据结构之 —— 08哈希表
散列算法(也就是哈希)的作用是尽可能快地在数据结构中找到一个值.在之前如果要在数据结构中获得一个值(使用get方法),需要遍历整个数据结构来找到它. 所有元素根据和该元素对应的键,保存在数组的特定位置 ...
- C - 数据结构实验:哈希表
Description 在n个数中,找出出现次数最多那个数字,并且输出出现的次数.如果有多个结果,输出数字最小的那一个. Input 单组数据,第一行数字n(1<=n<=100000). ...
- 学习数据结构笔记(8) ---[哈希表(Hash table)]
B站学习传送门–>尚硅谷Java数据结构与java算法(Java数据结构与算法) 一般在java程序访问数据库时都会安排从内存的缓存层中取数据;之前的做法是自己写个哈希表,实现对数据的缓存. 哈 ...
- 数据结构基础(18) --哈希表的设计与实现
哈希表 根据设定的哈希函数 H(key)和所选中的处理冲突的方法,将一组关键字映射到一个有限的.地址连续的地址集 (区间) 上,并以关键字在地址集中的"映像"作为相应记录在表中的存 ...
最新文章
- 使用eclipse生成javadoc的方法
- android短信安全,[原创]分析了一款android短信木马
- python3键盘事件_python+selenium3 鼠标事件和键盘事件
- 硅谷历史_使其新颖:硅谷设计的历史
- java线程——详解Callable、Future和FutureTask
- Navicat的使用,连表查询,python代码操作sql语句
- 使用LIstView和自定义Adapter完成列表信息显示
- java声明接口_为什么必须用Java声明接口?
- canvas瓦片图加载
- 单片机毕业设计不用愁!!30篇单片机毕业设计参考案例
- 基于stm32单片机外文文献_13个基于STM32的经典项目设计实例,全套资料~-嵌入式系统-与非网...
- 数据结构:八大数据结构分类
- 用泰勒级数展开证明欧拉公式
- hishop6.0和易分销2.0数据库迁移手册
- shell脚本实现从master节点批量配置salve节点(主机名有瑕疵,IP映射,ssh服务)
- uniapp开发-公众号h5、小程序、移动app
- 获取cookies(pyppeteer)
- 最大子矩阵和问题java_最大子矩阵
- linux0.11内核完全剖析 - ll_rw_blk.c
- QQ注册页面(完整版)
热门文章
- 什么是总资产(亿)?
- 计算机向用户传递计算 处理结果的设备,计算机向用户传递计算、处理结果的设备是()...
- 苹果原壁纸高清_动漫壁纸 | 玩具总动员潮图手机壁纸
- (Modern Family S01E04) Part 5
- win10清理网上邻居密码
- win32学习之路(六)
- 平板电脑什么牌子好 多场景智慧生活由它展开
- amdintel服务器性能差异,高频比多核重要?浅析为何AMD游戏性能干不过Intel
- 微信小程序bindtap和carchtap的区别
- 查看、替换回车换行符