【数据结构】什么是哈希表?如何运用于前端项目,算法实践
目录
对象与哈希表的区别
哈希值的方法
运用的场景
场景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)和所选中的处理冲突的方法,将一组关键字映射到一个有限的.地址连续的地址集 (区间) 上,并以关键字在地址集中的"映像"作为相应记录在表中的存 ...
最新文章
- SparkSQL 与 Spark Core的关系
- 查看电脑python虚拟环境-手把手教你在Linux系统下使用Python虚拟环境
- jQuery学习入门总结之css()和addClass()的不同
- Timer组件的使用
- pytorch实战案例-手写数字分类-卷积模型——深度AI科普团队
- 07.配置日志的存储路径、设置日志的格式
- 语句乎?表达式乎?(Python/C)
- android opengl美颜功能,Android 关于美颜/滤镜 利用PBO从OpenGL录制视频
- NOI2010:航空管制(拓扑排序 + 思维)
- 两种方法解决Undefined symbol SystemInit问题
- Banner 怎么实现轮播不同尺寸的图片
- 使用 kubeadm 初始化 worker节点出现 not ready 故障
- 介绍分享几款免费的在线Web文件管理器
- 区块链与能源互联网的碰撞
- MySQL适合运行在Docker中吗?
- 未来可能发生的十大颠覆性科技创新
- 3D模型文件--STL,OBJ,3DS
- 《角斗士》一个帝国的史诗绝唱
- 抖音无水印视频爬虫(二)——爬虫的实现
- Matlab中legend的用法总结