Map 和 Set

目录

一、搜索

概念:

模型:

二、Map

​编辑

      1.Map 实例化:

   2. Map的常见方法:

3.Map的常见方法演示:

1. put(K key, V value):添加键值对

3. containsKey(Object key):检查键是否存在

4. containsValue(Object value):检查值是否存在

5. remove(Object key):删除指定键的键值对

6. keySet():获取所有键的集合

7. values():获取所有值的集合

8. entrySet():遍历所有键值对

9.  getOrDefault(Object key, V defaultValue);

4.Map 的注意事项:

三、Set

1. Set 常见方法:

2. Set 常见方法演示:

containsAll 方法:

addAll 方法:

3.Set 的注意事项:


一、搜索

概念:

        在之前,以前我们学习常见的搜索方式有:

        1. 直接遍历,元素如果比较多效率会非常慢。

        2. 二分查找,但搜索前必须要求序列是有序的。

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

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

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

        3. 不重复集合,即需要先搜索关键字是否已经在集合中

        可能在查找时进行⼀些插入和删除的操作,即动态查找,那上述两种方式就不太适合了,所以下文介绍的 MapSet是⼀种适合动态查找的集合容器。

        

模型:

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

        

        1. 纯 key 模型:由唯一的键(key)组成,没有与键直接关联的特定值(value)。

        有⼀个英文词典,快速查找⼀个单词是否在词典中

        快速查找某个名字在不在通讯录中

        

        2. Key-Value 模型:是一种键(key)和值(value)进行相关联的数据组织形式。每个键都对应着一个特定的值,通过键可以快速查找、更新与之关联的值。如查找在一串字符串中查找,某个单词在该字符串中出现的次数。

        统计文件中每个单词出现的次数,统计结果是每个单词都有与其对应的次数:<单词,单词出现的次数>。

         梁山好汉的江湖绰号:每个好汉都有自己的江湖绰号

        

        并且,要注意的是:

        Map 中存储的就是key-value的键值对,Set中只存储了Key。

        

二、Map

         可以看到,HashMap 和 TreeMap 都实现了 Map 接口。

        那么,就可以 利用 Map 接口类型的变量来引用 HashMap 或 TreeMap 的实例化:

      1.Map 实例化:

Map<String, Integer> map1 = new TreeMap<>();Map<String, Integer> map2 = new HashMap<>();

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

        Map该接口类中存储的是结构的键值对,并且K⼀定是唯⼀的(比如上面代码的String ),不能重复。

   2. Map的常见方法:

        

3.Map的常见方法演示:

以 HashMap 实例化 Map 接口演示:  

Map<String, Integer> hashMap = new HashMap<>();

1. put(K key, V value):添加键值对

hashMap.put("Apple", 10);
hashMap.put("Banana", 5);
hashMap.put("Orange", 8);

2. get(Object key):根据键获取值

int appleCount = hashMap.get("Apple");
System.out.println(appleCount); // 10
3. containsKey(Object key):检查键是否存在
boolean hasMango = hashMap.containsKey("Mango");
System.out.println(hasMango); // false
4. containsValue(Object value):检查值是否存在
boolean hasCount5 = hashMap.containsValue(5);
System.out.println(hasCount5); // true
5. remove(Object key):删除指定键的键值对
hashMap.remove("Banana");
System.out.println(hashMap); // {Apple=10, Orange=8}
6. keySet():获取所有键的集合
for (String key : hashMap.keySet()) {System.out.println("Key: " + key);
}
// 输出:
// Key: Apple
// Key: Orange
7. values():获取所有值的集合
for (int value : hashMap.values()) {System.out.println("Value: " + value);
}
// 输出:
// Value: 10
// Value: 8
8. entrySet():遍历所有键值对
for (Map.Entry<String, Integer> entry : hashMap.entrySet()) {System.out.println(entry.getKey() + " -> " + entry.getValue());
}
// 输出:
// Apple -> 10
// Orange -> 8
9.  getOrDefault(Object key, V defaultValue);

该方法会尝试根据给定的键从中获取对应的值。如果键存在,就返回该键对应的值;若键不存在,则返回你提供的默认值(defaultValue)。

int integer = hashMap.getOrDefault("Apple",666);System.out.println(integer); // 10int integer1 = hashMap.getOrDefault("waht",666);System.out.println(integer1); // 666

4.Map 的注意事项:

        

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

2. Map中存放键值对的Key是唯⼀的,value是可以重复的,(当put相同的key,不同的value值时,只是将key所对应的value值进行替换,以最后存放的value为主)。

 Map<String, Integer> hashMap = new HashMap<>();hashMap.put("Apple", 10);hashMap.put("Apple",15);hashMap.put("Apple",40);System.out.println(hashMap.get("Apple")); // 40

 

3. HashMap的key和value都可以为空,在TreeMap中插入键值对时,key不能为空,value可以为空。

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

        

TreeMap和HashMap是Map的接口实现类,用于存储键对值数据,以下是他们的区别:       

三、Set

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

1. Set 常见方法:

  1. add(E e):如果指定元素不存在于集合中,则将其添加到集合里。添加成功返回 true,若元素已存在则返回 false
  2. remove(Object o):如果集合中存在指定元素,则将其移除。移除成功返回 true,若元素不存在则返回 false
  3. contains(Object o):判断集合中是否包含指定元素,包含则返回 true,否则返回 false
  4. size():返回集合中元素的数量。
  5. isEmpty():判断集合是否为空,为空返回 true,否则返回 false
  6. clear():移除集合中的所有元素。
  7. iterator():返回一个用于遍历集合的迭代器。
  8. toArray():将set中的元素转换为数组。
  9. containsAll: 是否包含指定集合的所有元素。
  10.  addAll:将集合中的元素添加到指定集合中。如果添加的元素在当前集合中已经存在,则不会重复添加。

2. Set 常见方法演示:

public static void main(String[] args) {// 创建一个 HashSet 实例,使用 Set 接口引用Set<String> set = new HashSet<>();// 1. add(E e) 方法:添加元素set.add("apple");set.add("banana");set.add("cherry");System.out.println("添加元素后的集合: " + set); //[banana, apple, cherry]// 尝试添加重复元素boolean isAdded = set.add("apple");System.out.println("尝试添加重复元素 'apple',是否添加成功: " + isAdded); // falseSystem.out.println("添加重复元素后的集合: " + set); //[banana, apple, cherry]// 2. remove(Object o) 方法:移除元素boolean isRemoved = set.remove("banana");System.out.println("移除元素 'banana',是否移除成功: " + isRemoved); //trueSystem.out.println("移除元素后的集合: " + set); // [apple, cherry]// 3. contains(Object o) 方法:判断元素是否存在boolean containsElement = set.contains("cherry"); System.out.println("集合中是否包含元素 'cherry': " + containsElement); //true// 4. size() 方法:获取集合元素数量int size = set.size();System.out.println("集合中元素的数量: " + size); // 2// 5. isEmpty() 方法:判断集合是否为空boolean isEmpty = set.isEmpty();System.out.println("集合是否为空: " + isEmpty); //false// 6. clear() 方法:清空集合set.clear();System.out.println("清空集合后,集合是否为空: " + set.isEmpty()); //true// 重新添加元素set.add("date");set.add("elderberry");// 7. iterator() 方法:使用迭代器遍历集合System.out.println("使用迭代器遍历集合:");Iterator<String> iterator = set.iterator();while (iterator.hasNext()) {System.out.println(iterator.next()); }//date//elderberry}

toArray 方法 :

 Set<Integer> set1 = new HashSet<>();set1.add(5);set1.add(20);set1.add(15);set1.add(8);Integer[] toArray = set1.toArray(new Integer[0]);for (Integer a : toArray) {System.out.print(a + " ");}System.out.println(); // 20 5 8 15 

containsAll 方法:

 Set<String> set1 = new HashSet<>();set1.add("apple");set1.add("banana");set1.add("cherry");Set<String> set2 = new HashSet<>();set2.add("apple");set2.add("banana");boolean result = set1.containsAll(set2);System.out.println("set1 是否包含 set2 中的所有元素: " + result); //true

addAll 方法:

Set<String> set1 = new HashSet<>();set1.add("apple");set1.add("banana");Set<String> set2 = new HashSet<>();set2.add("banana");set2.add("cherry");set1.addAll(set2);System.out.println("添加元素后的 set1: " + set1); // [banana, apple, cherry]

3.Set 的注意事项:

1. Set 可以对集合进行去重。

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

3其key值不能进行修改,如果要修改需要删除后,再重新插入。

4. TreeSet的底层是使⽤Map来实现的,其使⽤key与Object的⼀个默认对象作为键值对插⼊到Map中 的 。 在 TreeSet 中,要存储的元素被作为 TreeMap 的 key而 TreeMap 的 value 则统一使用一个静态的、不可变的 Object 对象来占位,因为 TreeSet 只关心元素本身,并不需要额外存储与元素关联的值。

  TreeSet 和 HashSet 的区别:

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/71140.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytest测试专题 - 2.1 一种推荐的测试目录结构

<< 返回目录 1 pytest测试专题 - 2.1 一种推荐的测试目录结构 2 pytest 项目目录结构及文件功能 以下是典型 pytest 项目中常见的文件和目录结构及其功能的概述&#xff1a; 2.1 文件/目录结构 文件/目录功能描述test_ 文件* 主测试文件&#xff0c;命名通常以 test_…

常用架构图:业务架构、产品架构、系统架构、数据架构、技术架构、应用架构、功能架构及信息架构

文章目录 引言常见的架构图I 业务架构图-案例模块功能说明1. 用户界面层 (UI)2. 应用服务层3. 数据管理层4. 基础设施层业务流程图示例技术实现II 功能架构图 -案例功能模块说明1. 船舶监控模块2. 报警管理模块3. 应急响应模块4. 通信管理模块5. 数据分析模块数据管理层基础设施…

爬虫实战:利用代理ip爬取推特网站数据

引言 亮数据-网络IP代理及全网数据一站式服务商屡获殊荣的代理网络、强大的数据挖掘工具和现成可用的数据集。亮数据&#xff1a;网络数据平台领航者https://www.bright.cn/?promoRESIYEAR50/?utm_sourcebrand&utm_campaignbrnd-mkt_cn_csdn_yingjie202502 在跨境电商、社…

蓝桥杯篇---温度传感器 DS18B20

文章目录 前言DS18B201. DS18B20 引脚说明2. 单总线通信协议3. DS18B20 操作流程初始化写操作读操作 4. 示例代码5. 代码说明6. 注意事项总结 前言 本文简单介绍了IAP15F2K61S2中温度传感器模块DS18B20的使用。 DS18B20 DS18B20 是一款数字温度传感器&#xff0c;采用单总线&…

YOLOv5-Seg 深度解析:与 YOLOv5 检测模型的区别

YOLOv5-Seg 深度解析&#xff1a;与 YOLOv5 检测模型的区别 1. 概述 YOLOv5 是一个强大的目标检测框架&#xff0c;而 YOLOv5-Seg 是其扩展版本&#xff0c;增加了实例分割功能。 YOLOv5&#xff08;目标检测&#xff09; vs YOLOv5-Seg&#xff08;实例分割&#xff09; 版…

传感器篇(一)——深度相机

目录 一 概要 二 原理 三 对比 四 产品 五 结论 一 概要 深度相机是一种能够获取物体深度信息的设备&#xff0c;相较于普通相机只能记录物体的二维图像信息&#xff0c;深度相机可以感知物体与相机之间的距离&#xff0c;从而提供三维空间信息。在你正在阅读的报告中提到…

docker部署单机版doris,完整无坑

文章目录 一、部署1、修改内核参数2、下载Docker 开发环境镜像3、下载安装包4、启动镜像5、配置fe6、配置be7、远程连接 二、运维命令参考资料 一、部署 1、修改内核参数 在启动doris的be时&#xff0c;需要将 Linux 操作系统的内核参数设置为2000000&#xff0c;这里是Doris…

二叉树(C语言版)

文章目录 二叉树完全二叉树和满二叉树二叉搜索树基本操作实现代码运行结果 分析红黑树2-3-4树(理论模型)红黑树(实际实现) 二叉树 树是一种层次结构&#xff0c;它在现实生活中是广泛存在的&#xff0c;比如&#xff1a;族谱(family tree)&#xff0c;组织机构&#xff0c;目录…

HCIA项目实践---ACL访问控制列表相关知识和配置过程

十 ACL访问控制列表 1 策略的概念 在网络连通之后&#xff0c; 把所有为了追求控制而实现的技术都叫策略 2 访问控制 在路由器流量流入或者流出的接口上&#xff0c;匹配流量&#xff0c;执行相应的动作。&#xff08;流量流入或者流出的接口并不是一个固定的概念而是一个相对的…

3-初始化项目

在文件UIStaticHelper配置路径 YIUI自动化工具 在Tools->YIUI自动化工具即可看到面板。有6个功能&#xff0c;如下所示。 在运行的过程中&#xff0c;用绑定代替反射是因为手机运行放射是开销比较大的&#xff0c;所以用绑定代替反射&#xff0c;在发布前UI如果有改动&…

人工智能的现状与未来发展趋势分析

引言 人工智能(AI)作为21世纪最具革命性的技术之一,正在深刻改变我们的生活和工作方式。从早期的概念提出到如今的广泛应用,AI经历了漫长而曲折的发展历程。本文旨在全面分析AI的现状,并探讨其未来发展趋势,以期为读者提供一个清晰而深入的视角。 一、人工智能的发展历…

基于Spring Boot的家电销售展示平台设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

栈与队列(C语言版)

文章目录 栈与队列1. 栈基本操作实现(基于链表)代码运行结果 应用场景 2. 队列基本操作实现代码运行结果 应用场景 栈与队列 1. 栈 栈是一种操作受限的线性结构。操作受限体现在&#xff0c;栈只能在一端添加和删除元素&#xff0c;符合后进先出 ( LIFO ) 的特性&#xff0c;…

第二节 字符串、列表

字符串 字符串的切片 使用[ : ]截取&#xff0c;左闭右开&#xff0c;示例&#xff1a; str"nihao" print(str[0:3]) 第一个参数省略默认从头开始&#xff0c;第二个参数省略默认截取到末尾 当第二个参数或第三个参数为-1时&#xff0c;从右向左取值&#xff0c…

【NLP 22、语言模型 language model】

有时候我也想听听&#xff0c;我在你心里&#xff0c;是什么样子 —— 25.1.12 一、什么是语言模型 语言是灵活的&#xff0c;也是有规律的 了解一门语言的人可以判断一句话是否“合理” 通俗来讲&#xff0c;语言模型用来评价一句话(句子可以看作是字的组合)是否“合理”或…

【CSS进阶】常见的页面自适应的方法

在前端开发中&#xff0c;自适应布局&#xff08;Responsive Design&#xff09;是一种让网页能够适应不同屏幕尺寸、设备和分辨率的技术。常见的自适应布局方法包括 流式布局、弹性布局&#xff08;Flexbox&#xff09;、栅格布局&#xff08;Grid&#xff09;、媒体查询&…

通过openresty和lua实现随机壁纸

效果&#xff1a; 图片存放路径&#xff1a; /home/jobs/webs/imgs/ ├── default/ │ ├── image1.jpg │ ├── image2.png ├── cats/ │ ├── cat1.jpg │ ├── cat2.gif ├── dogs/ │ ├── dog1.jpg访问http://demo.com/imgs/default 随机返回…

CAS单点登录(第7版)20.用户界面

如有疑问&#xff0c;请看视频&#xff1a;CAS单点登录&#xff08;第7版&#xff09; 用户界面 概述 概述 对 CAS 用户界面 &#xff08;UI&#xff09; 进行品牌化涉及编辑 CSS 样式表以及一小部分相对简单的 HTML 包含文件&#xff0c;也称为视图。&#xff08;可选&…

安全测试中的身份认证与访问控制深度解析

第一部分:基本概念与核心问题 1. 身份认证与访问控制基础 1.1 身份认证三要素 知识因素(密码、PIN码)持有因素(硬件令牌、手机)生物因素(指纹、面部识别)1.2 访问控制模型 DAC(自主访问控制)MAC(强制访问控制)RBAC(基于角色的访问控制)2. 关键安全机制 2.1 会话…

AI 编程工具—Cursor 进阶篇 数据分析

AI 编程工具—Cursor 进阶篇 数据分析 上一节课我们使用Cursor 生成了北京房产的销售数据,这一节我们使用Cursor对这些数据进行分析,也是我们尝试使用Cursor 去帮我们做数据分析,从而进一步发挥Cursor的能力,来帮助我们完成更多的事情 案例一 房产销售数据分析 @北京202…