Map和Set接口的常用功能介绍

Map和Set接口

两者的存在意义❓

Map和Set是一种专门用来进行搜索的容器,或者说数据结构,其搜索的效率与具体的实例化子类有关,在学习这两个搜索容器之前,我们所熟知的所搜方式比如有:

  1. 直接遍历查找

    时间复杂度为O(n),元素越多,遍历就会越慢

  2. 二分查找

    时间复杂度为O(logn),并且二分查找之前,数组还必须已经是有序了,那这个限制就比较大了

其次上述两种排序,比较适合静态的查找,即在查找过程中最好不要对一份数据进行插入或者删除,但现实是有很多数据时查找的过程中,对数据都会有多多少少的进行动态的读写操作,就比如L根据姓名查找考试成绩,那此时Map和Set就是比较适合用于动态查找的情况.

模型🚶

一般把搜索的数据称为关键字key,和关键字对应的值(value),两者一结合:key-value就是所谓的键值对,所以模型一般有两种:

  1. 纯key模型

    比如查字典

  2. key-value模型

    比如根据梁山好汉的名字去查他们的绰号等

Map中存储的就是键值对,而Set集合中只存储Key


关于Map的说明🦅

Map是一个接口类,该类没有继承Collection,该类中存储的是<K,V>结构的键值对,并且k一定是唯一的,不能重复,并且插入同一个键的时候,老值将会被新值所覆盖

关于Map.Entry<K,V>的说明:🏎

Map.Entry<K,V>是Map内部实现的用于存放<Key,Value>键值对映射关系的内部类,该类提供了一些方法:

方法解释
K getKey()获取entry的关键字key
V getValue()获取entry的值value
V setValue(V value)将键值对的value设置为指定的value

注意:对每一个键值对,Map.Entry<K,V>并没有设置修改key的方法


Map的常用方法🍊

方法解释
V get(Object key)根据Key获取对应的value
V getOrDefault(Object key,V defaultValue)根据Key获取value,如果map里没有这个key,那就返回这个默认的值
put(k,v)存放键值对
V remove(K key)根据key找到对应的键值对,并将其删除,返回值是那个被删除的键值对的值
Set keySet()将map中所有的键进行保存,保存至set集合中
Set<Map.Entry<K,V>> entrySet()以键值对的形式,将map中所有的键值对进行存储,存储至Set集合中
Collection values()将map中所有的值进行存储,存储至Collection集合当中
boolean containsKey(Object key)查看map中是否包含key这个键
boolean containsValue(Object value)查看map中是否包含value这个值

Map的使用注意事项😋

  1. Map是一个接口,不能直接实例化对象,如果实例化对象只能实例化其实现类TreeMap或者说HashMap
  2. Map中存放的键都是唯一的,而每个键所对应的值在map中可以是多份
  3. 因为Map有两个具体的实现类TreeMap和HashMap,前者底层是红黑树,存放的键必须要能够比较,所以实例化的是前者的话,key不能存放null,而hashmap可以,值value两者都可以存放null
  4. Map中的所有键值对的键都可以分离出来:ketSet(),并存放至Set集合中
  5. Map中所有键值对的值都可以分离出来:values(),并存放至Collection集合中
  6. Map中的键值对的键都不能修改,要是想修改,只能删除那个键值对,再插入新的键值对

关于Set的说明📦

存在意义:降重⚙️

Set的常用方法👶

方法解释
boolean add(E e)加键
void clear()清空set集合
Iterator iterator()因为Set实现了Iterable接口,所以可以使用迭代器
boolean contains(Object o)查看set集合中是否包含o
int size()查看set中有几个键
boolean isEmpty()查看set集合是否为空
boolean containsAll(Collection<?> c)查看set中是否包含集合c中的所有成员
boolean addAll(Collection<?> c)将集合c中所有的元素都添加至set中
boolean remove(Object o)删除set中的o

Set的使用注意事项🌵

  1. Set继承自Collection
  2. Set只存键,且要求键唯一
  3. Set底层是有map实现的,其使用key和一个Object的默认对象作为值,组成键值对存至map中
  4. Set的最大功能就是进行降重
  5. 实现Set接口的具体实现类有:TreeSet和HashSet,其实还有一个LinkedHashSet,LinkedHashSet是在HashSet的基础之上,维护了一个双向链表来记录元素的插入次序
  6. Set中的key不可被修改,要想修改也是要先删除,再重新插入一个
  7. Set中不能插入null的key(这对TreeSet而言,因为TreeSet有序,要求元素必须能够比较,null不可比较,所以HashSet是可以存放null的)

参照例题:💅

力扣138(赋值带随机指针的链表)

力扣771(宝石与石头)

牛客(坏键盘打字)

力扣692(前k个高频单词)

(均参考力扣专栏)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值