【Map】集合总结
一、Map
之前学习的Collection集合体系是单列集合,即一次存取一个元素
Map是双列集合,一次存取一对元素,这一对儿称为键值对,key-value,且key是映射到value
所谓键映射到值,是指只能通过键找到值,无法通过值找键
Map中键不能重复!值允许重复
Map中一个键,只能对应一个值
Map是根接口,常用有2个实现类
HashMap
TreeMap
二、HashMap【重点】
2.1 介绍
HashMap是Map的实现,也是键不能重复,值可以重复,只能通过键找值
底层是使用哈希表实现,所以存储的元素是无序的
允许存储null值,null键
不保证线程安全
Hashtable是线程安全的,不允许null值null键,除此之外与HashMap一样
2.2 api演示
public class Demo1 {
public static void main(String[] args) {HashMap<Integer, String> map = new HashMap<>( );map.put(1,"A");map.put(2,"B");map.put(3,"C");map.put(4,"D");
// 判断是否包含该键System.out.println(map.containsKey(4));// 判断是否包含该valueSystem.out.println(map.containsValue("D"));
// get(Object key) ,通过键找值的String s = map.get(1);System.out.println("s = " + s);
System.out.println("删除前:" + map );// V remove(Object key),通过键删除整个键值对String v = map.remove(2);System.out.println("v = " + v);System.out.println("删除后:" + map );
// 集合大小System.out.println(map.size() );
// 集合清空map.clear();
// 集合为空System.out.println(map.isEmpty( ));}
private static void show1() {// 创建空mapHashMap<Integer, String> map = new HashMap<>( );// 存储// map.put(33,"C");// map.put(33,"C");// map.put(11,"A");// map.put(44,"D");// map.put(22,"B");// map.put(55,"D");
// 存储元素无序,key不允许重复,value可以重复// System.out.println(map );
// put方法的返回值,返回的是该键所对应的旧值,如果没有返回nullString a = map.put(1, "A");System.out.println("a = " + a);
String a2 = map.put(2, "B");System.out.println("a2 = " + a2);
String a222 = map.put(2, "BBB");// 这个BBB会将之前的B覆盖System.out.println("a222 = " + a222);
System.out.println(map);}
}
2.3 map的遍历
Map没有直接遍历的手段,但是提供了三种Collection的方式来查看Map,分别
键集(keySet),即集合中只有键
值集(values),即集合中只有值
键值映射集(entrySet),即集合中键值都有
public static void main(String[] args) {HashMap<Integer, String> map = new HashMap<>( );map.put(1, "A");map.put(2, "B");map.put(3, "C");map.put(4, "D");
// 键集Set<Integer> keySet = map.keySet( );for (Integer key : keySet) {System.out.println(key);}
// 值集Collection<String> values = map.values( );for (String v : values) {System.out.println(v);}
// 键值映射集Set<Map.Entry<Integer,String>> entrySet = map.entrySet();for (Map.Entry<Integer,String> entry: entrySet) {Integer key = entry.getKey( );String value = entry.getValue( );System.out.println(key+"-->"+value );}}
Entry,是Map的内部类,代表的是键值项,即一个Entry对象代表一个键值对对象
这个Entry类中提供了单独获得键,和值的方法 ,例如 getKey(),getValue
2.4 去重原理
HashMap只有键能去重
将元素存储在键上,先调用元素的hashcode方法,判断地址值是否相同
如果地址值不同,直接存储
如果地址值相同,再调用equals方法
调用equals方法,如果
结果是true,即相同,不存储
结果是false,即不相同,即存储
2.5 扩容原理[重点]
HashMap初始容量,默认是16,也可以通过构造方法设置初始容量,但是一般不用改
还有一个影响性能的,是加载因子,默认值是0.75
当存储的元素> 0.75(加载因子) * 16(初始容量) ,就要扩容,扩容成2倍
但是,JDK1.8以后,HashMap底层变成有hash表(数组)+链表+红黑树实现
详情: 参考其他资料
这样底层设计的目的是为了查询更快!!!
三、TreeMap
TreeMap,是双列集合,也是键不允许重复
底层是红黑树,会根据存储的键默认进行自然顺序排序,也可以根据创建TreeMap时传入的比较器进行排序
它与我之前写过的treeset几乎一样,这里不再过多介绍
四、LinkedHashMap
LinkedHashMap,保证存储的元素有序(遍历顺序和插入顺序一致),且去重
public static void main(String[] args) {LinkedHashMap<Integer, String> lhm = new LinkedHashMap<>( );lhm.put(3,"C");lhm.put(2,"B");lhm.put(4,"D");lhm.put(5,"E");lhm.put(4,"D");lhm.put(1,"A");lhm.put(1,"A");
System.out.println(lhm );
}
相关文章:
【Map】集合总结
一、Map 之前学习的Collection集合体系是单列集合,即一次存取一个元素 Map是双列集合,一次存取一对元素,这一对儿称为键值对,key-value,且key是映射到value 所谓键映射到值,是指只能通过键找到值,无法通过值找键 Map中键不能重复!值允许重复 Map中一个键,只能对应一个值 Ma…...

SpringBoot实现发送邮件功能
目录 一、开启邮件服务 二、导入pom依赖 三、配置yml文件 四、发送邮件 4.1、发送文字邮件 4.2、发送html邮件 4.3、发送附件邮件 4.4、发送图片邮件 一、开启邮件服务 这里拿QQ邮箱举例。 翻到下面进行开启,之后获取授权码。 二、导入pom依赖 <dependency><…...

外观数列 ---- 模拟
题目链接 题目: 分析: 题目的意思如下:所以我们需要引用双指针来找到连续的字符有几个, 并添加到答案中, 接着将此字符添加到答案中, 让left right , 继续向后遍历整个字符串, 重复上面的操作将答案重新赋给字符串, 继续重复上述操作, 应该重复n - 1 次, 因为n为1的时候, 直…...

上心师傅的思路分享(二)
Druid monitor 与Springboot常见报错界面渗透小技巧 目录 前言 1.Druid monitor介绍 2.Druid未授权(1rank) 3.druid弱口令 4.Druid进一步利用 4.1 URL监控 4.2 Session监控 利用思路 EditThisCookie(小饼干插件) 5.SpringBoot Actuator未授权访问漏洞 5.1 简介 5…...

116页 | 2024年中国金融行业网络安全研究报告(免费下载)
以上是资料简介和目录,如需下载,请前往星球获取!!!...

基于fabric封装一个简单的图片编辑器(vue 篇)
介绍 前言vue demo版本react 版本 前言 对 fabric.js 进行二次封装,实现图片编辑器的核心功能。核心代码 不依赖 ui响应式框架vue ,react 都适用。 只写了核心编辑相关代码便于大家后续白嫖二次开发 核心代码我就没有打包发布 会 和 业务代码一起放到项目中。 vu…...
Linux中 .PHONY 和 all 在 Makefile 中的作用
1 .PHONY 和 all .PHONY 是 GNU make 工具中的一个特殊指令,用于指示某个目标是一个伪目标。伪目标并不对应于实际的文件,而是用来执行一系列命令的标识符。使用 .PHONY 的好处包括避免与现有文件同名造成的冲突,以及提高 make 的执行效率&am…...
Flutter 中的 FlexibleSpaceBar 小部件:全面指南
Flutter 中的 FlexibleSpaceBar 小部件:全面指南 Flutter 是一个由 Google 开发的跨平台 UI 框架,它提供了丰富的组件来帮助开发者构建高性能、美观的移动、Web 和桌面应用。在 Flutter 的组件库中,FlexibleSpaceBar 是一个与 SliverAppBar …...
每天一个数据分析题(三百五十四)-分析报表
分析报表的主要作用是通过可视化图表的形式将各种分析结果完整、准确地呈现给阅读者,帮助阅读者读懂数据,从而进一步发现数据背后隐藏的业务问题。下列说法正确的是? A. 静态报表的主要载体是电子表格工具 B. BI报表的数据源获取方式是应用…...

卫星通信频段有哪些
卫星通信使用到的频段涵盖L, S, C, Ku, Ka等,而最常用的频段是C(4~8GHz)和Ku(12~18GHz)频段,而Ka(27-40GHz)频段是后起之秀。目前地球赤道上空有限的地球同步卫星轨位几乎已被各国占满,C和Ku频段内的频率资源被大量使用,而Ka频段的…...
RobotMaster编程语言:深度探索与实践挑战
RobotMaster编程语言:深度探索与实践挑战 RobotMaster编程语言,作为机器人编程领域的一颗璀璨明珠,其独特性与复杂性吸引了无数探索者的目光。本文将从四个方面、五个方面、六个方面和七个方面深入剖析这一编程语言的奥秘,同时揭…...
Ascend训练软件栈了解
一.分布式大模型训练的完整流程及注意事项 1. 迁移分析 模型选取与约束说明 : 确保模型能在GPU或CPU上运行并获取性能基线,了解不支持场景,如DP模式、APEX库、bmtrain框架等。支持度分析 : 使用msFmkTransplt工具分析模型算子、…...

官网万词霸屏推广 轻松实现百度万词霸屏源码系统 带完整的安装代码包以及搭建教程
系统概述 官网万词霸屏推广源码系统是一款基于先进技术研发的综合性 SEO 工具。它的设计理念是通过智能化的算法和策略,帮助用户快速提升网站在百度等搜索引擎中的排名,实现大量关键词的霸屏效果。该系统整合了多种优化技术,包括关键词研究、…...

Linux 36.3 + JetPack v6.0@jetson-inference之图像分类
Linux 36.3 JetPack v6.0jetson-inference之图像分类 1. 源由2. imagenet2.1 命令选项2.2 下载模型2.3 操作示例2.3.1 单张照片2.3.2 视频 3. 代码3.1 Python3.2 C 4. 参考资料5. 补充5.1 第一次运行模型本地适应初始化5.2 samba软连接 1. 源由 从应用角度来说,图…...

重庆公司记账代理,打造专业财务管理解决方案的领先企业
重庆公司记账代理,作为专业的财务管理服务提供商,我们的目标是为公司的经营管理和决策提供科学、准确的财务数据支持,我们通过长期的专业经验和对市场的深入理解,为您提供一站式的记账服务和财务咨询。 专业团队 我们拥有一支由经…...

transformers 阅读:Llama 模型
正文 学习一下 transformers 库中,Llama 模型的代码,学习过程中写下这篇笔记,一来加深印象,二来可以多次回顾。 笔者小白,里面错误之处请不吝指出。 层归一化 LlamaRMSNorm transformers 中对于 LlamaRMSNorm 类的…...

python绘制piper三线图
piper三线图 Piper三线图是一种常用于水化学分析的图表,它能够帮助我们理解和比较水样的化学成分。该图表由三个部分组成:两个三角形和一个菱形。两个三角形分别用于显示阳离子和阴离子的相对比例,而菱形部分则综合显示了这些离子比例在水样…...

咖啡机器人如何精准控制液位流量
在如今快节奏的生活中,精确控制液位流量的需求愈发迫切,特别是在咖啡机器人等精密设备中。为了满足这一需求,工程师们不断研发出各种先进的技术,以确保液体流量的精准控制。其中,霍尔式流量计和光电式流量计就是两种常…...
Go go-redis应用
go-redis 是 Go 语言的一个流行的 Redis 客户端库,它提供了丰富的功能来与 Redis 数据库进行交互。 1、简单应用 package mainimport ("context""fmt""log""github.com/redis/go-redis/v9" )func main() {ctx : context…...

从混乱到有序:PDM系统如何优化物料编码
在现代制造业中,物料管理是企业运营的核心。物料编码作为物料管理的基础,对于确保物料的准确性、唯一性和高效性至关重要。随着产品种类的不断增加和产品变型的多样化,传统的物料编码管理方式已经不能满足企业的需求。本文将探讨产品数据管理…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...