Map和Set总结
Map和Set
Map和Set是专门用来进行搜索的数据结构,适合动态查找
模型
搜索的数据称为关键字(key),关键字对应的叫值(value),key-value键值对
- key模型
- key-value模型
Map存储的就是key-value模型,Set只存储了key
Map
Map是接口类,key是唯一的不能重复
package Map;
import java.util.Map;
import java.util.TreeMap;/*** Created by Y_manyou927* Description:TreeMap实例* User: yyt* Date: 2023-03-10* Time: 14:57*/
public class TestMap {public static void main(String[] args) {Map<String,String> m = new TreeMap<>();// 1.使用put函数添加元素,无序的m.put("孙悟空","齐天大圣");m.put("猪八戒","天蓬元帅");m.put("沙和尚","卷帘大将");System.out.println(m.size());System.out.println(m);
// m.put("唐僧","金蝉子");String str = m.put("唐僧","金蝉子");// 2.如果key存在,可以使用value替换原来的value,key的值不能换,除非删除keym.put("唐僧","师傅");System.out.println(m);// get(key)返回value// 3.如果key存在,返回value,如果不存在,返回nullSystem.out.println(m.get("孙悟空"));System.out.println(m.get("白龙马"));System.out.println("======getOrDefault======");// 4.getOrDefault返回value,如果key不存在,返回一个默认值System.out.println(m.getOrDefault("孙悟空","齐天大圣"));System.out.println(m.getOrDefault("筋斗云","十万八千里"));System.out.println("======containsKey与containsValue======");// 5.containsKey(key)检查key是否包含,时间复杂度O(logN)// 使用红黑树的性质进行查找,存在true,否则falseSystem.out.println(m.containsKey("孙悟空")); //trueSystem.out.println(m.containsKey("二郎神")); //false// containsValue(value)检查value是否包含,时间复杂度0(N)// 6.进行整体遍历,存在true,否则falseSystem.out.println(m.containsValue("齐天大圣")); //trueSystem.out.println(m.containsValue("斗战胜佛")); //falseSystem.out.println("============");// 7.遍历key值与value值for (String s: m.keySet()) {System.out.print(s + " ");}System.out.println();for (String s: m.values()) {System.out.print(s + " ");}System.out.println();System.out.println("=============");// 8.打印所有的键值对// entrySet(): 将Map中的键值对放在Set中返回for (Map.Entry<String,String> entry : m.entrySet()) {System.out.println(entry.getKey()+"--->"+entry.getValue());}}
}

注意:
-
Map是一个接口,不能直接实例化对象,只能实例化其实现类TreeMap和HashMap
-
Map中存放键值对的Key是唯一的,Value可以重复
-
Map插入的键值对Key不能为空,否则会抛出 NullPointerException 异常,Value可以为空
-
Map中的Key可以全部提取出来,存储到Set中进行访问(Key不能重复
-
Map中的Value可以全部提取出来,存储到Collection中的任何一个子集合中
-
Map中键值对的Key不能直接修改,Value可以修改,修改Key只能删除Key,然后重新插入
-
TreeMap与HashMap区别

Set
Set与Map的区别:Set是继承Collection的接口类,Set只存储key
package Set;import java.util.Set;
import java.util.TreeSet;/*** Created by Y_manyou927* Description:TreeSet实例* User: yyt* Date: 2023-03-10* Time: 15:37*/
public class TestSet {public static void main(String[] args) {Set<String> s = new TreeSet<>();// 1.add(key) 不存在插入,存在不插入// 返回true 与 falses.add("孙悟空");s.add("猪八戒");s.add("沙和尚");System.out.println(s);boolean b = s.add("孙悟空");System.out.println(b); //falseSystem.out.println("============");// 2.contains(key)判断key是否存在System.out.println(s.contains("孙悟空")); //trueSystem.out.println(s.contains("唐僧")); //false// 3.remove移除存在的元素s.remove("孙悟空");System.out.println(s);System.out.println(s.size());}
}

注意:
- Set是继承自Collection的接口类
- Set只存储到key,并且key要唯一
- Set底层是使用Map来实现的,其使用key与Object的一个默认对象作为键值对插入到Map中的
- Set最大功能就是对集合的元素进行去重
- LinedHashSet是在HashSet的基础上维护了一个双向链表来记录元素的插入次序
- Set的key不能修改,要修改必须先删除然后重新插入
- TreeSet与HashSet区别

哈希表
哈希表,散列表:通过哈希函数使元素的存储位置与它的关键码建立一一映射的关系
- 插入元素:根据元素的关键码,计算元素的存储位置并进行存放
- 搜索元素:对元素的关键码进行同样的计算,所得函数值作为元素的存储位置
哈希方法(散列方法):使用的转换函数称为哈希函数,构造出来的结构称为哈希表(HashTable)
哈希函数设置为:hash(key) = key % capacity ,capacity为存储元素底层空间大小

哈希冲突
哈希冲突:不同关键字通过哈希函数计算出相同的哈希地址
冲突-避免
关键字数量要大于哈希表底层数组的容量,因此哈希冲突是必然会发生的。我们只能降低哈希冲突的发生,或者解决哈希冲突发生产生的问题
1.哈希函数设计
哈希冲突发生的一个原因就可能是哈希函数设计的不合理
- 哈希函数的定义域必须包括需要存储的全部关键码,而如果散列表允许有m个地址时,其值域必须在0到m-1 之间
- 哈希函数计算出来的地址能均匀分布在整个空间中
- 哈希函数应该比较简单
2.常见哈希函数
- 直接定制法–(常用) 取关键字的某个线性函数为散列地址:Hash(Key)= A*Key + B 优点:简单、均匀 缺点:需要事先知道关 键字的分布情况 使用场景:适合查找比较小且连续的情况
- 除留余数法–(常用) 设散列表中允许的地址数为m,取一个不大于m,但最接近或者等于m的质数p作为除数,按照哈希函数: Hash(key) = key% p(p<=m),将关键码转换成哈希地址
3.冲突-避免-负载因子调节(重点掌握)
负载因子 : A = 表中的元素个数 / 散列表长度

当冲突率达到无法忍受的程度,可以通过降低负载因子来变相降低冲突率。已知哈希表的关键字个数是不可改变的,因此我们只能通过修改数组的长度来达到降低负载因子。
4.哈希冲突-解决
闭散列:开放地址法,当发生哈希冲突的时候,将key存放到冲突的下一个位置
1.线性探测
从发生冲突的位置开始,依次往后进行探测,直到寻找到下一个空位置为止
不能直接删除元素
2.二次探测
线性探测的缺陷就是产生冲突的数据全部堆积在一起,当然这与其找下一个空位置有关
二次探测就是为了避免这种问题
- 闭散列最大的问题就是空间利用率比较低,这也是哈希的缺陷
哈希冲突-解决-开散列/哈希桶
开散列法又称为链地址法,将大集合中的搜索问题转化到小集合中进行搜索
JDK1.8开始使用尾插法
当数组的长度超过64且链表的长度超过8,此时链表会变成红黑树

冲突严重时的解决办法
- 每个桶背后是另一个哈希表
- 每个桶背后是一颗搜索树
相关文章:
Map和Set总结
Map和Set Map和Set是专门用来进行搜索的数据结构,适合动态查找 模型 搜索的数据称为关键字(key),关键字对应的叫值(value),key-value键值对 key模型key-value模型 Map存储的就是key-value模型,Set只存储了key Map Map是接口类…...
pytorch网络模型构建中的注意点
记录使用pytorch构建网络模型过程遇到的点 1. 网络模型构建中的问题 1.1 输入变量是Tensor张量 各个模块和网络模型的输入, 一定要是tensor 张量; 可以用一个列表存放多个张量。 如果是张量维度不够,需要升维度, 可以先使用 …...
面试时候这样介绍redis,redis经典面试题
为什么要用redis做缓存 使用Redis缓存有以下几个优点: 1. 提高系统性能:缓存可以将数据存储在内存中,加快数据的访问速度,减少对数据库的读写次数,从而提高系统的性能。 2. 减轻后端压力:使用缓存可以减…...
机械学习 - scikit-learn - 数据预处理 - 2
目录关于 scikit-learn 实现规范化的方法详解一、fit_transform 方法1. 最大最小归一化手动化与自动化代码对比演示 1:2. 均值归一化手动化代码演示:3. 小数定标归一化手动化代码演示:4. 零-均值标准化(均值移除)手动与自动化代码演示&#x…...
华为OD机试题 - 最长连续交替方波信号(JavaScript)| 机考必刷
更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:最长连续交替方波信号题目输入输出示例一输入输出Code解题思路版…...
executor行为相关Spark sql参数源码分析
0、前言 参数名和默认值spark.default.parallelismDefault number of partitions in RDDsspark.executor.cores1 in YARN mode 一般默认值spark.files.maxPartitionBytes134217728(128M)spark.files.openCostInBytes4194304 (4 MiB)spark.hadoop.mapreduce.fileoutputcommitte…...
双通道5.2GSPS(或单通道10.4GSPS)射频采样FMC+模块
概述 FMC140是一款具有缓冲模拟输入的低功耗、12位、双通道(5.2GSPS/通道)、单通道10.4GSPS、射频采样ADC模块,该板卡为FMC标准,符合VITA57.1规范,该模块可以作为一个理想的IO单元耦合至FPGA前端,8通道的JE…...
理解java反射
是什么Java反射是Java编程语言的一个功能,它允许程序在运行时(而不是编译时)检查、访问和修改类、对象和方法的属性和行为。使用反射创建对象相比直接创建对象有什么优点使用反射创建对象相比直接创建对象的主要优点是灵活性和可扩展性。当我…...
EasyRcovery16免费的电脑照片数据恢复软件
电脑作为一种重要的数据储存设备,其中保存着大量的文档,邮件,视频,音频和照片。那么,如果电脑照片被删除了怎么办?今天小编给大家介绍,误删除的照片从哪里可以找回来,误删除的照片如…...
若依微服务版在定时任务里面跨模块调用服务
第一步 在被调用的模块中添加代理 RemoteTaskFallbackFactory.java: package com.ruoyi.rpa.api.factory;import com.ruoyi.common.core.domain.R; import com.ruoyi.rpa.api.RemoteTaskService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springf…...
SpringMVC简单配置
1、pom.xml配置 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.12.RELEASE</version></dependency></dependencies><build><…...
xcat快速入门工作流程指南
目录一、快速入门指南一、先决条件二、准备管理节点xcatmn.mydomain.com三、第1阶段:添加你的第一个节点并且用带外BMC接口控制它四、第 2 阶段 预配节点并使用并行 shell 对其进行管理二:工作流程指南1. 查找 xCAT 管理节点的服务器2. 在所选服务器上安…...
C++回顾(十九)—— 容器string
19.1 string概述 1、string是STL的字符串类型,通常用来表示字符串。而在使用string之前,字符串通常是 用char * 表示的。string 与char * 都可以用来表示字符串,那么二者有什么区别呢。 2、string和 char * 的比较 (1)…...
Hadoop入门
数据分析与企业数据分析方向 数据是什么 数据是指对可观事件进行记录并可以鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合,它是可以识别的、抽象的符号。 他不仅指狭义上的数字,还可以是具有一…...
高校如何通过校企合作/实验室建设来提高大数据人工智能学生就业质量
高校人才培养应该如何结合市场需求进行相关专业设置和就业引导,一直是高校就业工作的讨论热点。亘古不变的原则是,高校设置不能脱离市场需求太远,最佳的结合方式是,高校具有前瞻性,能领先市场一步,培养未来…...
提升学习 Prompt 总结
NLP现有的四个阶段: 完全有监督机器学习完全有监督深度学习预训练:预训练 -> 微调 -> 预测提示学习:预训练 -> 提示 -> 预测 阶段1,word的本质是特征,即特征的选取、衍生、侧重上的针对性工程。 阶段2&…...
JavaScript学习笔记(2.0)
BOM--(browser object model) 获取浏览器窗口尺寸 获取可视窗口高度:window.innerWidth 获取可视窗口高度:window.innerHeight 浏览器弹出层 提示框:window.alert(提示信息) 询问框:window.confirm(提示信息) 输…...
直击2023云南移动生态合作伙伴大会,聚焦云南移动的“价值裂变”
作者 | 曾响铃 文 | 响铃说 2023年3月2日下午,云南移动生态合作伙伴大会在昆明召开。云南移动党委书记,总经理葛松海在大会上提到“2023年,云南移动将重点在‘做大平台及生态级新产品,做优渠道转型新动能,做强合作新…...
STM32F1开发实例-振动传感器(机械)
振动(敲击)传感器 振动无处不在,有声音就有振动,哒哒的脚步是匆匆的过客,沙沙的夜雨是暗夜的忧伤。那你知道理科工程男是如何理解振动的吗?今天我们就来讲一讲本节的主角:最简单的机械式振动传感器。 下图即为振动传…...
2023最新ELK日志平台(elasticsearch+logstash+kibana)搭建
去年公司由于不断发展,内部自研系统越来越多,所以后来搭建了一个日志收集平台,并将日志收集功能以二方包形式引入自研系统,避免每个自研系统都要建立一套自己的日志模块,节约了开发时间,管理起来也更加容易…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
