【数据结构】MapSet

news2024/12/26 13:27:03

【概念】

Map和Set是一种专门用于搜索的数据结构,其搜索效率与具体实例化的子类数量有关,本质上是一颗二叉搜索树 

搜索的关键数据为关键字“Key”,关键字对应的数据为值“Value”,将其称为“Key-Value键值对”

【关于Map】

Map是一个接口类,该类没有继承至Collection,该类中存储的是<K,V>结构的键值对,且K一定是唯一的,不可重复

【关于Map.Entry<K,V>】

Map.Entry<K,V>是Map内部实现的,用于存放<K,V>键值对之间映射关系的内部类

为什么有Entry?

在Java源码中,Map的接口中又定义了一个内部接口Entry

【关于Map的常用方法】

【实例化Map】

Map<String,String> map = new TreeMap<>();

Map是一个接口,因此它不能去直接实例化,只能去new两个实现类,一个TreeMap,一个HashMap,这里放的TreeMap就是一个二叉搜索树

 【设置key对应的value】

Map.put("及时雨", "宋江");
Map.put("齐天大圣", "孙悟空“);

这里设置了两个K和V的键值对,都是一一对应的关系

 【获取key对应的value】

String val = map.get("齐天大圣");
System.out.println(val);

该图中value值是一个String,所以需要通过String来进行接收,该图中输出“孙悟空”

但如果get中填写的是“齐天大圣2”这样在Map中对应key没有value的值时,会返回一个null

 【返回key对应的value,key若不存在,则返回默认值】

String val2 = map.getOrDefault("齐天大圣2","haha");
System.out.println(val2);

原代码中不存在“齐天大圣2”这个key,因此返回一个自定义默认值“haha”

 【删除key对应的value】

String val3 = map.remove("齐天大圣");
System.out.println(val3);

删除了“齐天大圣”这个key,返回其value的同时删除key映射关系

 【返回所有key的不重复集合】

Set<String> set = map.keySet<>();
System.out.println(set);

返回[ 及时雨 , 齐天大圣 ]这样的不重复集合结果

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

但如果给相同的key设置了不同的value时:

Map.put("及时雨", "宋江");
Map.put("及时雨", "宋江2");

此时在Map中只会保存第二个,即“宋江2”,即:当我们在Map中存储元素时,key如果重复了,就会更新对应的value值,Map具有去重特性

 但如果给相同的value设置了不同的key时:

Map.put("及时雨", "宋江");
Map.put("齐天大圣", "宋江");

这是可以的,因此key一定是不一样的,但是value是可重复的

【返回所有key-value的映射关系】

Set<Map.Entry<String,String>> entries = map.entrySet();

“map.entrySet()”这个方法会将key和value组织到一起,

它的返回值是“Set<Map.Entry<K,V>>”,K和V填写key和value的数据类型

现在Set中放入的是"Map.Entry<String,String>"这个数据类型,因此里面存入的就是两个该数据类型的元素

输出方式1:

System.out.println(entries);

通过该代码可以返回:[ 及时雨 = 宋江 , 齐天大圣 = 孙悟空 ]这样的不重复集合结果

输出方式2:

通过该代码可以返回以下结果:

因此,Map中的key可以全部分离出来,存储到Collection中任何一个子集合中(value可能有重复)

【关于Map的总结】

1.Map是一个接口,因此它不能去直接实例化,只能去new两个实现类,一个TreeMap,一个HashMap

2.当我们在Map中存储元素时,key如果重复了,就会更新对应的value值,Map具有去重特性,key一定是不一样的,但是value是可重复的

3.在TreeMap中插入键值对时,key不能为null,否则会抛出空指针异常,value可以为null

此外:HashMap中的key和value都可以为null

4.Map中的key可以全部分离出来,存储到Set中进行访问(因为key不能重复);Map中的key可以全部分离出来,存储到Collection中任何一个子集合中(value可能有重复)

5.Map中键值对的key不能直接修改,value可以修改,若要修改key,只能先将key删除掉,然后才能进行重新插入

6.往TreeMap中存储元素时,key一定要是可以比较的,否则就会报“类型转换”异常

TreeMap是一个二叉搜索树,因此源码内部内置了比较方法

Student在这里是一个自定义类型,且没有告诉代码如何比较,所以会抛出类型转换异常 

7.TreeMap和HashMap的区别

【关于Set】

Set和Map的不同点是:Set是继承自Collection的接口类,且Set中只存储了Key

【关于Set的常用方法】

【实例化Set】

【添加元素】

该代码执行后输出的是一个“abc”,而不是两个“abc”

这意味着,Set中不能存储重复的元素

【返回迭代器】

这里的<E>要替换为所打印元素的类型

通过迭代器,可以去遍历Set中所有的元素

【关于Set的总结】

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

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

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

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

5.Set中的key不能修改,若想修改key只能删除原来的key然后重插

6.TreeSet和HashSet的区别

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

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

相关文章

8 种渗透测试类型

渗透测试是对网络、硬件或软件系统进行有计划的攻击&#xff0c;目的是揭露可能破坏系统完整性并危及有价值数据的安全缺陷。虽然渗透测试的类型不同&#xff0c;但它们都旨在利用漏洞和弱点来测试现有安全措施的有效性。 渗透测试 不同类型的渗透测试取决于人们希望在特定系…

初识Linux · O(1)调度算法

目录 前言&#xff1a; O(1)调度算法 前言&#xff1a; 在初识进程的那一块&#xff0c;我们已经知道了进程并不是一直占用cpu资源的&#xff0c;而是存在时间片的概念&#xff0c;即&#xff0c;每个进程都有一定的时间来执行该进程&#xff0c;时间一到&#xff0c;该进程…

会议平台后端优化方案

会议平台后端优化方案 通过RTC的学习&#xff0c;我了解到了端对端技术&#xff0c;就想着做一个节省服务器资源的会议平台 之前做了这个项目&#xff0c;快手二面被问到卡着不知如何介绍&#xff0c;便有了这篇文章 分析当下机制 相对于传统视频平台&#xff08;SFU&#xff…

windows 驱动实例分析系列-定时日志的COM驱动

本文章的前置文章为: windows 驱动编写原则 windows COM驱动 案例 windows COM驱动的I/O处理 在前面的设计中,主要是对windows提供的VirtualSerial源代码的讲解,但是那个驱动其实是一个空壳驱动,用于学习的,在I/O处理中,也讲述了serial I/O处理的本质,接下来会将这些…

PGMP-03战略一致性

1.概要 program strategy alignment&#xff1a;战略一致性 2.详细

css的背景background属性

CSS的background属性是一个简写属性&#xff0c;它允许你同时设置元素的多个背景相关的子属性。使用这个属性可以简化代码&#xff0c;使其更加清晰和易于维护。background属性可以设置不同的子属性。 background子属性 定义背景颜色 使用background-color属性 格式&#x…

经典文献阅读之--WiROS(用于机器人的WiFi感知工具箱)

0. 简介 近期的许多研究探索了使用基于WiFi的感知技术来改善SLAM&#xff08;同时定位与地图构建&#xff09;、机器人操控或探索。此外&#xff0c;WiFi的广泛可用性使其成为最具优势的射频信号。但WiFi传感器缺乏一个准确、易处理、多功能的工具箱&#xff0c;这限制了它们与…

MicoZone-Maven

一、理论 Maven 是 Apache 软件基金会组织维护的一款专门为 Java 项目提供项目构建和依赖管理支持的工具。 通过Maven管理依赖的优势&#xff1a; 1、通过在pom.xml中指定jar包坐标即可自动从仓库下载依赖 2、如果jar包存在子依赖会自动下载子依赖包 3、如果jar包之间存在冲突…

Web安全 - 服务端请求伪造SSRF(Server-Side Request Forgery)

文章目录 OWASP 2023 TOP 10SSRF 导图SSRF 概念SSRF的工作原理SSRF攻击场景SSRF防御策略1. 严格验证用户输入2. 禁用或限制对内部网络的访问3. 强制使用外部API代理4. 禁止直接访问敏感资源5. 输入内容长度限制6. 检测和监控7. 确保对HTTP请求的处理安全 SSRF防御实现方案1. 白…

【鸿蒙开发】05 登录Demo解析

文章目录 一、功能介绍 在鸿蒙开发中&#xff0c;一个完善的登录功能是许多应用程序的基础需求。本文将详细介绍一个鸿蒙 App 登录 Demo&#xff0c;包括其功能介绍、代码解析以及代码 demo 的下载地址。 本文初始代码从华为开发者网站下载&#xff0c;根据该Demo进行内容调整。…

【Fast-LIO系列】Fast-LIO、Fast-LIO2、Faster-LIO系列特点分析

【FAST-LIO】Fast-LIO系列特点分析 1. FAST-LIO核心贡献1.将IMU和Lidar特征点紧耦合在一起2.使用反向传播考虑到了运动补偿3. 基于IESKF中的 卡尔曼增益更新 K 2. FAST-LIO2核心贡献(2021年)1. 不用线&#xff0c;面特征点而使用全局点云2. 使用ikd-tree存储点云3. ikd-Tree 3.…

P3131 [USACO16JAN] Subsequences Summing to Sevens S Python题解

[USACO16JAN] Subsequences Summing to Sevens S 题目描述 Farmer John’s N N N cows are standing in a row, as they have a tendency to do from time to time. Each cow is labeled with a distinct integer ID number so FJ can tell them apart. FJ would like to ta…

C语言 | Leetcode C语言题解之第448题找到所有数组中消失的数字

题目&#xff1a; 题解&#xff1a; int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize) {for (int i 0; i < numsSize; i) {int x (nums[i] - 1) % numsSize;nums[x] numsSize;}int* ret malloc(sizeof(int) * numsSize);*returnSize 0;for (in…

特征工程——一门提高机器学习性能的艺术

当前围绕人工智能(AI)和机器学习(ML)展开的许多讨论以模型为中心&#xff0c;聚焦于 ML和深度学习(DL)的最新进展。这种模型优先的方法往往对用于训练这些模型的数据关注不足&#xff0c;甚至完全忽视。类似MLOps的领域正迅速发展&#xff0c;通过系统性地训练和利用ML模型&…

ZYNQ: GPIO 之 MIO 控制 LED 实验

GPIO 之 MIO 控制 LED 实验目的 使用 GPIO 通过两个 MIO 引脚控制 PS 端两个 LED 的亮灭&#xff0c;实现底板上 PS_LED0、PS_LED1 两个 LED 灯同亮同灭的效果。 简介 ZYNQ PS 中的外设&#xff08;如 USB 控制器、UART 控制器、I2C 控制器以及 GPIO 等等&#xff09;可以通…

亲测无限坐席在线客服系统源码/二开版/基于ThinkPHP+搭建教程

源码简介&#xff1a; 亲测了一款实用的无限坐席在线客服系统源码&#xff0c;这可是基于ThinkPHP框架开发的二开版哦&#xff01;里面还附带了一份超详细的搭建教程。 安装过程简直不能更简单&#xff0c;只需一键操作&#xff0c;启动两个端口就搞定了。而且&#xff0c;它…

动态库的加载全过程

区分一组概念&#xff1a;逻辑地址&#xff0c;虚拟地址&#xff0c;物理地址。 逻辑地址&#xff1a;是我们的代码在编译过程&#xff0c;编译器帮对每一条代码所生成的指令所编写的地址。 物理地址&#xff1a;当程序被放入到内存中时&#xff0c;内存与每一条指令所对应的…

回执单识别-银行回单识别API-文字识别OCR API

银行回单是一种由银行提供的交易凭证&#xff0c;记录了账户资金的交易明细。它通常包括存款、取款、转账、汇款、支付等各种类型的资金往来信息。银行回单可以是纸质的&#xff0c;也可以是电子版的&#xff0c;内容详尽记录了交易的相关信息&#xff0c;具有法律效力&#xf…

CSS 效果:实现动态展示双箭头

最近写了一段 CSS 样式&#xff0c;虽然不难&#xff0c;但实现过程比较繁琐。这个效果结合了两个箭头&#xff0c;一个突出&#xff0c;一个内缩&#xff0c;非常适合用于步骤导航或选项卡切换等场景。样式不仅仅是静态的&#xff0c;还可以通过点击 click 或者 hover 事件&am…

【机器学习(五)】分类和回归任务-AdaBoost算法

文章目录 一、算法概念一、算法原理&#xff08;一&#xff09;分类算法基本思路1、训练集和权重初始化2、弱分类器的加权误差3、弱分类器的权重4、Adaboost 分类损失函数5、样本权重更新6、AdaBoost 的强分类器 &#xff08;二&#xff09;回归算法基本思路1、最大误差的计算2…