Map(关联数组)和Set(集合)

目录

Map和Set是用来专门查找的数据结构,查找效率非常高

Map是key-value模型(对应了两个东西)

Set是纯key模型(只对应i一个东西)

Map的使用

Map的方法

Map的put()方法

Map的get()方法

Map的getOrdefault()方法

Map的keySet()方法

Map的entrySet()方法

Entry是Map的内部接口类​编辑Entry的方法,v>,v>

Map的values()方法,返回类型是Collection

Map的containsKey()方法

Map的containsValue()方法

Set的使用

Set的方法,

1.有100W个(10个)数据,并且数据有重复的,将所有重复的数据进行去重复

2.有100W个(10个)数据,并且数据有重复的,找到第一个重复的数据

3.统计10W个(几个)数据当中,每个数据出现的次数

4.统计100W个(10个)数据重复数据>=2出现的次数?


Map和Set是用来专门查找的数据结构,查找效率非常高

我们以前也有用来查找的方法比如:

1.直接遍历查找,效率非常

2.二分查找前提还得让数据有序

假如我们将全国人民的身份证信息存储在一个地方然后需要查找某个人的信息就非常麻烦,用直接遍历查找效率非常慢,用二分查找还得把12亿的数据排序一遍,并且它们还非常不适合删除操作

这时候我们就可以用Map或Set两数据结构

Map是key-value模型(对应了两个东西)

key-value模型的意思是 一个关键字对应一个值,

例如:hello在一片文章里出现了几次,hello就是key(关键字),helllo出现的次数就是value(对应的值,这里的值不一定是整数),这里对应了两个东西分别是hello,和hello出现次数

Set是纯key模型(只对应i一个东西)

key模型意思是只有关键字

例如:hello是否出现在某篇文章里

Map的使用

Map是一个接口类,不能实例化,只能实例化实现Map接口的类入TreeMap或HashMap

TreeMap底层是一棵搜索树(红黑树),HashMap底层是一个哈西表

Map的方法

Map的put()方法

Map实现的是TreeMap,由于底层是一棵搜索树(红黑树)它们会这样放

可以发现实现了TreeMap类的由于底层是一颗搜索树(红黑树)它重写了toString方法的同时还对key进行了排序,但要求key能够进行比较(可以实现Comparable接口)

实现了HashMap类由于底层是哈希表,它不要求key一定能够进行比较也并没有根据key排序的同时也没有重写toString()方法

Map的get()方法

根据key名字获取到对应value,没有对应key就返回null

Map的getOrdefault()方法

如果key有返回对应的value值,如果没有就返回默认值

Map的keySet()方法

获取到Map里所有的key值放到Set里,并且还去重,返回类型是Set

Map的entrySet()方法

返回类型是Set<Map.Entry<>>,用于返回所有的key-value关系

Set<Map.Entry<String,Integer>>对应着Map里每条key-value数据,相当于

Map.Entry<String,Integer>对应众多key-value数据里的一条

Entry<K,V>是Map的内部接口类Entry<K,V>的方法

Map的values()方法,返回类型是Collection<v>

返回Map所有的value值,可以有重复

Map的containsKey()方法

判断Map里是否有对应的key值

Map的containsValue()方法

判断Map里是否有对应的Value值

Set的使用

Set只存储Key并且不能重复

为什么Set存储的数据不能重复?

Set的底层是Map,它利用了Map中key不能重复的原则

Set的方法,

具体方法的使用我们就不展开了,写几道题吧

1.有100W个(10个)数据,并且数据有重复的,将所有重复的数据进行去重复

Set是个纯key模型且能够去重复用这个数据结构刚好

2.有100W个(10个)数据,并且数据有重复的,找到第一个重复的数据

3.统计10W个(几个)数据当中,每个数据出现的次数

这里出现了 每个数据 和 次数 两个不同的元素,用key-value模型,

例如hello在文章里出现了几次

4.统计100W个(10个)数据重复数据>=2出现的次数?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值