js——Set和Map,以及哈希表

注意:Map和Set不能通过下标访问数据,因为集合里面元素无序。所以遍历Map和Set中的数据一般使用for of或者forEach方法。
在这里插入图片描述

1.哈希表
参考链接

哈希表概述:
散列表(Hash table,也叫哈希表),是根据关键值(Key)而直接进行访问的数据结构。也就是说,它通过把关键值key映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数(哈希函数),存放记录的数组叫做散列表。(哈希表一般用数组来存储)
向哈希表中存数据:
根据数据的key值和哈希函数,得到一个数组下标,这个下标的含义是数据在哈希表中的存放的位置。若发生了冲突,则再根据冲突的处理方法来解决冲突。找到最终存放的位置后,将数据存放进去。
在哈希表中查找数据:
根据数据的key值和哈希函数,以及解决冲突的方法来找。
所以哈希表查询某个数据的时间复杂度为o(1)
在这里插入图片描述
哈希函数的设计方法有:
.直接寻址法、
解决冲突的方法有:
开放寻址法(包括线性探测法,平方探测法,双哈希)、再散列法、 链地址法
在这里插入图片描述
在这里插入图片描述

2.java中hashmap和map关系(注意是java中)

Map是存储键和值这样的键值对的数据的集合,但存储的数据是没有顺序的,其键不能重复,但其值是可以重复的。Map是一个接口,HashMap是实现了Map接口的类;
HashMap是基于哈希表实现的,每一个元素是一个key-value键值对。
对于 HashMap 而言,系统 key-value 当成一个整体进行处理,系统根据 Hash 算法来计算 key-value 的存储位置,这样可以保证能快速存、取 Map 的 key-value 对。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

3.js中Map

js中只有Map,没有HashMap。
从上面分析java中的HashMap可以发现,HashMap只是map的一种底层实现方式。所以在js里,用原生的map就够用了(刷题够了)
https://es6.ruanyifeng.com/#docs/set-map
在引入Map之前,js中保存键值对是通过对象的形式,而对象中,键的类型只能是字符串类型。而引入Map后,用Map来存储键值对,键的类型可以是数字类型,可以是字符串类型,可以是对象类型,函数类型等等。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
这里是引用

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

4.js中Set

ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set本身是一个构造函数,用来生成 Set 数据结构。
Set是一组key的集合,不存储value。由于key不能重复,所以,在Set中,没有重复的key。
Set是多用来操作数组的(比如数组去重,查找数组中是否存在某个元素,等等)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(1)初始化Set
在这里插入图片描述
在这里插入图片描述
(2)数组转Set以及Set转数组
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(3)使用Set对数组元素进行去重
在这里插入图片描述
在这里插入图片描述

(4)使用Set查找数组中是否有某个元素
在这里插入图片描述

(5)遍历Set

这里是引用
(1) keys方法、values方法、entries方法返回的都是遍历器对象。由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以keys方法和values方法的行为完全一致。
在这里插入图片描述
在这里插入图片描述
(2)forEach()
Set 结构的实例与数组一样,也拥有forEach方法,用于对每个成员执行某种操作,没有返回值。
forEach方法的参数就是一个处理函数。该函数的参数与数组的forEach一致,依次为键值value、键名key、集合本身(上例省略了该参数)。这里需要注意,Set 结构的键名就是键值(两者是同一个值),因此第一个参数与第二个参数的值永远都是一样的。
在这里插入图片描述
这里是引用
在这里插入图片描述

(6)使用Set对两数组求并集,交集,差集

这里是引用
在这里插入图片描述

  • 20
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值