Java -数据结构,Map Set
创始人
2024-06-01 05:09:15
0

一、搜索

1.1、概念及场景

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

  1. 直接遍历,时间复杂度为O(N),元素如果比较多效率会非常慢
  2. 二分查找,时间复杂度为log 2为底的N ,但搜索前必须要求序列是有序的
    上述排序比较适合静态类型的查找,即一般不会对区间进行插入和删除操作了,而现实中的查找比如:
  3. 根据姓名查询考试成绩
  4. 通讯录,即根据姓名查询联系方式
  5. 不重复集合,即需要先搜索关键字是否已经在集合中
    可能在查找时进行一些插入和删除的操作,即动态查找,那上述两种方式就不太适合了,本节介绍的Map和Set是 一种适合动态查找的集合容器

1.2、模型

一般把搜索的数据称为关键字(Key),和关键字对应的称为值(Value),将其称之为Key-value的键值对,所以
模型会有两种:

  1. 纯 key 模型,比如:
    有一个英文词典,快速查找一个单词是否在词典中
    快速查找某个名字在不在通讯录中
  2. Key-Value 模型,比如:
    统计文件中每个单词出现的次数,统计结果是每个单词都有与其对应的次数:<单词,单词出现的次数>
    梁山好汉的江湖绰号:每个好汉都有自己的江湖绰号
    而Map中存储的就是key-value的键值对,Set中只存储了Key。

二、Map 的使用

Map官方文档
在这里插入图片描述

2.1、关于Map的说明

Map是一个接口类,该类没有继承自Collection,该类中存储的是结构的键值对,并且K一定是唯一的,不能重复

2.2、关于Map.Entry的说明

Map.Entry 是Map内部实现的用来存放键值对映射关系的内部类,该内部类中主要提供了的获取,value的设置以及Key的比较方式

在这里插入图片描述

注意:Map.Entry并没有提供设置Key的方法

2.3、Map 的常用方法说明

在这里插入图片描述

2.3.1、put(k key, v value) – 设置key 对应的value值

public static void main(String[] args) {Map map = new HashMap<>();map.put("hello",2);map.put("bit",4);map.put("wwww",3);System.out.println(map);}

在这里插入图片描述

2.3.2、get(Object key) – 返回 key 对应的 value

根据对应的key值返回对应的value值

public static void main(String[] args) {Map map = new HashMap<>();map.put("hello",2);map.put("bit",4);map.put("wwww",3);System.out.println(map.get("bit"));}

在这里插入图片描述

2.3.3、 getOrDefault(Object key, V defaultValue) 返回 key 对应的 value,key 不存在,返回默认值

public static void main(String[] args) {Map map = new HashMap<>();map.put("hello",2);map.put("bit",4);map.put("wwww",3);System.out.println(map.getOrDefault("AAA",18));}

在这里插入图片描述

2.3.4、remove(Object key) 删除 key 对应的映射关系

public static void main(String[] args) {Map map = new HashMap<>();map.put("hello",2);map.put("bit",4);map.put("wwww",3);System.out.println(map);map.remove("bit");System.out.println(map);}

在这里插入图片描述

2.3.5、Set> entrySet() 返回所有的 key-value 映射关系

在这里插入图片描述

2.3.6、Set keySet() - 返回所有 key 的不重复集合

在这里插入图片描述

至于为什么说 keySet方法 是返回不重复的集合。
是因为 Set 中 相同的数据只能存储一次。也就说Set里面存储的元素都是不同的。
这个在讲到Set的时候,你们就明白了。
而在 Map 中 存储 相同的元素,也有着自身的特点。
其 value 会根据最后一次的put的value值,进行更新。
在这里插入图片描述

2.3.7、boolean containsKey(Object key) - 判断是否包含 key

在这里插入图片描述

2.3.8、boolean containsValue(Object value) 判断是否包含 value

在这里插入图片描述

注意:
1、Map 是一个接口,不能直接实例化对象,如果实例化对象只能实例化其实现类 TreeMap 和 HashMap。

2、Map中存储“键值对” 的 Key 是唯一的,value 是可重复的。

3、在 TreeMap 中插入“键值对”时,key不能为null,否则就会抛出【NullPointerException异常】,但是Value可以为null。【HashMap 就没有这个问题】

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

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

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

7、TreeMap 和 HashMap 的区别
在这里插入图片描述

三、Set 的说明

Set官方文档

Set与Map主要的不同有两点:Set是继承自Collection的接口类,Set中只存储了Key。
而 Map 是一个单独的接口,Map 中 存储 Key - Value
另外,Set 又称集合【Set 的汉语意思就是 集合】,它具有去重的功能,相同的元素,它只存储一个。

3.1、常见方法说明

在这里插入图片描述

3.1.1、boolean add(E e) 添加元素,但重复元素不会被添加成功

在这里插入图片描述

3.1.2、void clear() 清空集合

在这里插入图片描述

3.1.3、boolean contains(Object o) - 判断 o 是否在集合中

在这里插入图片描述

3.1.4、Iterator iterator() 返回迭代器

可参考 java -数据结构,List相关基础知识
在这里插入图片描述

3.1.5、boolean remove(Object o) 删除集合中的 o

在这里插入图片描述

3.1.6、int size() 返回set中元素的个数

在这里插入图片描述

3.1.7、boolean isEmpty() 检测set是否为空,空返回true,否则返回false

在这里插入图片描述

3.1.8、Object[] toArray() 将set中的元素转换为数组返回

在这里插入图片描述

注意:

  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
  8. TreeSet和HashSet的区别
    在这里插入图片描述

相关内容

热门资讯

怎么才能让鹦鹉说话? 怎么才能让鹦鹉说话?不是所有鹦鹉都会说话的,虎皮 牡丹 玄凤 之类的就不会说话,虽然有些资料上介绍 ...
孙悟空在南瞻部州被称呼为什么? 孙悟空在南瞻部州被称呼为什么?孙悟空在南瞻部州被称为孙大圣。他的称呼是比较威武凶猛的。因为他的人物形...
“每一个晚上”英语怎么讲 “每一个晚上”英语怎么讲every night
我在红袖写了一篇小说,只有签约... 我在红袖写了一篇小说,只有签约,没有上架,请问怎么样才能拿到稿费,我是签网协的每天都有更新的话。。达...
王朔:这辈子最对不起老婆和女儿... 王朔:这辈子最对不起老婆和女儿,但我死后财产全归徐静蕾,这是为何呢?因为在这个人的心中,徐静蕾才是自...
游戏《天地玄门》激活账号的激活... 游戏《天地玄门》激活账号的激活码怎么写?那个游戏得发短信到腾武才会获得激活码
孩子课后作业辅导,如何让老公平... 孩子课后作业辅导,如何让老公平心静气的教孩子?可以告诉老公,孩子的辅导需要老公有耐心一些,因为孩子犯...
《阿姨暖暖你的手》阅读题答案 《阿姨暖暖你的手》阅读题答案1、“春寒料峭”和“春暖花开”都是形容春天的词语。文中第(2)段中的“春...
想找到一本有声小说,喜马拉雅有... 想找到一本有声小说,喜马拉雅有,但是我忘记名字了。讲的是茅山道士的故事,但不是紫襟讲的,我问过了?书...
郝邵文合释小龙都演过什么电影我... 郝邵文合释小龙都演过什么电影我想知道,要全的1、笑林小子(又名:旋风小子)2、笑林小子2之乌龙院3、...
林黛玉放屁拉肚子 林黛玉放屁拉肚子林黛玉放屁拉肚子是《红楼梦》中的一个情节。在小说中,林黛玉因为情绪低落和身体不适而出...
克雷洛夫寓言有哪些寓言故事?故... 克雷洛夫寓言有哪些寓言故事?故事的主要内容及道理是什么?最起码说出3个,克雷洛夫寓言有哪些寓言故事?...
请告诉我一点笑话! 请告诉我一点笑话!告诉我一点笑话便可!如此美丽夜晚孤独是一种遗憾,想念着得不到的爱情已经成为习惯,情...
樱花、新年、任性、武士、爆破、... 樱花、新年、任性、武士、爆破、缇娜、武媚娘、土豪biangbiang面、萌萌哒、小鲜肉、醉了 用以上...
东北出马仙堂怎么写 东北出马仙堂怎么写去找高人查看 ,看看是否具备出马缘分,出马仙的堂单一般都是仙 或者给你立堂的师傅给...
探访鹿邑:漫步古城,寻迹历史名... 探访鹿邑:漫步古城,寻迹历史名人之路鹿邑是一个历史悠久的古城,有着丰富的文化底蕴和历史遗迹。探访鹿邑...
类似与儒道至圣的小说 类似与儒道至圣的小说[剑三+文修]自古名士真国色[系统]国士无双
星际争霸2人族怎么防隐形?怎么... 星际争霸2人族怎么防隐形?怎么看隐形?:轨道控制基地的雷达,防空塔和渡鸦自带的反隐效果人族有4招防隐...
谁有《从零开始学画漫画》电子书... 谁有《从零开始学画漫画》电子书 谢谢亲,去狗狗书籍呗,你去新浪爱问搜搜,应该能找到》
公主日记1里有首笨爱神的歌叫什... 公主日记1里有首笨爱神的歌叫什么名字stupid cupidstupid cupidstupid c...