Map 和 Set (Java详细讲解)看我就够了

14 篇文章 0 订阅
4 篇文章 0 订阅

Map 和 Set 

目录

Map 和 Set 

概念:

主要内容:

Mao集合

    Map的常用方法

注意事项

HashMap,TreeMap和LinkedHashMap   

TreeMap和HashMap的区别

Set集合

    作用:

    常用方法:

注意事项


Map 和 Set 

概念:

Map和set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。以前常见的 搜索方式有:

    1.直接遍历,时间复杂度为O(N),元素如果比较多效率会非常慢

    2. 二分查找,时间复杂度为 ,但搜索前必须要求序列是有序的

上述排序比较适合静态类型的查找,即一般不会对区间进行插入和删除操作了,而现实中的查找比如:

    1. 根据姓名查询考试成绩

    2. 通讯录,即根据姓名查询联系方式

    3. 不重复集合,即需要先搜索关键字是否已经在集合中可能在查找时进行一些插入和删除的操作,即动态查找,那上述两种方式就不太适合了,而Map和Set是 一种适合动态查找的集合容器。

主要内容:

    二分搜索树 BST 在JDK中主要是TreeSet 和 TreeMap

    哈希表 在JDK中主要是HashSet 和 HashMap

Set:存储不重复的Key值,使用Set来进行去重操作处理。

Map:存储的是Key = Value键值对,若需要根据Key找到相应的Value使用Map集合。

Mao集合

    Map的常用方法

​​​​​​​ 

注意事项

    1.Map是一个接口,不能直接实例化对象,如果要实例化对象只能实例化其实现类TreeMap或者HashMap

    2.Map中存放键值对的Key是唯一的,value是可以重复的

    3.在Map中插入键值对时,key不能为空,否则就会抛NullPointerException异常,但是value可以为空  

    4.Map中的Key可以全部分离出来,存储到Set中来进行访问(因为Key不能重复)。

    5.Map中的value可以全部分离出来,存储在Collection的任何一个子集合中(value可能有重复)。

    6.Map中键值对的Key不能直接修改,value可以修改,如果要修改key,只能先将该key删除掉,然后再来进重新插入。

HashMap,TreeMap和LinkedHashMap   

    1.HashMap是基于哈希表 + 红黑树的结构(JDK8之后),HashMap的元素保存顺序与元素的插入顺序无关,key和value都可以为null。

    2.TreeMap是基于红黑树的结构,TreeMap的元素保存顺序与元素的插入顺序也无关,key不能为null,value可以为null。使用TreeMap保存元素时,元素必须是Comparable子类或者传入比较器

    3.LinkedHashMap就是在HashMap的基础上维护了一个链表来记录元素的插入先后,可以按照元素的插入顺序来保存元素。

TreeMap和HashMap的区别

             

 

Set集合

    作用:

     去重,Set与Map主要的不同有两点:Set是继承自Collection的接口类,Set中只存储了Key。

    遍历Set集合,直接使用for - each循环即可(只要是Iterable接口的子类,都可以直接使用for - each循环),在遍历Map集合时需要将Map转为Set - for(Map.entry<具体类型> entry : map.entrySet())

 

    常用方法:

 

注意事项

    1.Set是继承自Collection的一个接口类。

    2.Set中只存储了key,并且要求key一定要唯一。

    3.Set的底层是使用Map来实现的,其使用key与Object的一个默认对象作为键值对插入到Map中的。    

    4.Set最大的功能就是对集合中的元素进行去重。

    5.实现Set接口的常用类有TreeSet和HashSet,还有一个LinkedHashSet,LinkedHashSet是在HashSet的基础上维护了一个双向链表来记录元素的插入次序。

    6.Set中的Key不能修改,如果要修改,先将原来的删除掉,然后再重新插入。

    7.Set中不能插入null的key。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是啊秋啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值