当前位置: 首页 > news >正文

【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年中国金融行业网络安全研究报告(免费下载)

以上是资料简介和目录&#xff0c;如需下载&#xff0c;请前往星球获取&#xff01;&#xff01;&#xff01;...

基于fabric封装一个简单的图片编辑器(vue 篇)

介绍 前言vue demo版本react 版本 前言 对 fabric.js 进行二次封装&#xff0c;实现图片编辑器的核心功能。核心代码 不依赖 ui响应式框架vue ,react 都适用。 只写了核心编辑相关代码便于大家后续白嫖二次开发 核心代码我就没有打包发布 会 和 业务代码一起放到项目中。 vu…...

Linux中 .PHONY 和 all 在 Makefile 中的作用

1 .PHONY 和 all .PHONY 是 GNU make 工具中的一个特殊指令&#xff0c;用于指示某个目标是一个伪目标。伪目标并不对应于实际的文件&#xff0c;而是用来执行一系列命令的标识符。使用 .PHONY 的好处包括避免与现有文件同名造成的冲突&#xff0c;以及提高 make 的执行效率&am…...

Flutter 中的 FlexibleSpaceBar 小部件:全面指南

Flutter 中的 FlexibleSpaceBar 小部件&#xff1a;全面指南 Flutter 是一个由 Google 开发的跨平台 UI 框架&#xff0c;它提供了丰富的组件来帮助开发者构建高性能、美观的移动、Web 和桌面应用。在 Flutter 的组件库中&#xff0c;FlexibleSpaceBar 是一个与 SliverAppBar …...

每天一个数据分析题(三百五十四)-分析报表

分析报表的主要作用是通过可视化图表的形式将各种分析结果完整、准确地呈现给阅读者&#xff0c;帮助阅读者读懂数据&#xff0c;从而进一步发现数据背后隐藏的业务问题。下列说法正确的是&#xff1f; A. 静态报表的主要载体是电子表格工具 B. BI报表的数据源获取方式是应用…...

卫星通信频段有哪些

卫星通信使用到的频段涵盖L, S, C, Ku, Ka等&#xff0c;而最常用的频段是C(4~8GHz)和Ku(12~18GHz)频段&#xff0c;而Ka(27-40GHz)频段是后起之秀。目前地球赤道上空有限的地球同步卫星轨位几乎已被各国占满&#xff0c;C和Ku频段内的频率资源被大量使用&#xff0c;而Ka频段的…...

RobotMaster编程语言:深度探索与实践挑战

RobotMaster编程语言&#xff1a;深度探索与实践挑战 RobotMaster编程语言&#xff0c;作为机器人编程领域的一颗璀璨明珠&#xff0c;其独特性与复杂性吸引了无数探索者的目光。本文将从四个方面、五个方面、六个方面和七个方面深入剖析这一编程语言的奥秘&#xff0c;同时揭…...

Ascend训练软件栈了解

一.分布式大模型训练的完整流程及注意事项 1. 迁移分析 模型选取与约束说明 &#xff1a; 确保模型能在GPU或CPU上运行并获取性能基线&#xff0c;了解不支持场景&#xff0c;如DP模式、APEX库、bmtrain框架等。支持度分析 &#xff1a; 使用msFmkTransplt工具分析模型算子、…...

官网万词霸屏推广 轻松实现百度万词霸屏源码系统 带完整的安装代码包以及搭建教程

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

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. 源由 从应用角度来说&#xff0c;图…...

重庆公司记账代理,打造专业财务管理解决方案的领先企业

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

transformers 阅读:Llama 模型

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

python绘制piper三线图

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

咖啡机器人如何精准控制液位流量

在如今快节奏的生活中&#xff0c;精确控制液位流量的需求愈发迫切&#xff0c;特别是在咖啡机器人等精密设备中。为了满足这一需求&#xff0c;工程师们不断研发出各种先进的技术&#xff0c;以确保液体流量的精准控制。其中&#xff0c;霍尔式流量计和光电式流量计就是两种常…...

Go go-redis应用

go-redis 是 Go 语言的一个流行的 Redis 客户端库&#xff0c;它提供了丰富的功能来与 Redis 数据库进行交互。 1、简单应用 package mainimport ("context""fmt""log""github.com/redis/go-redis/v9" )func main() {ctx : context…...

从混乱到有序:PDM系统如何优化物料编码

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

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

一些实用的chrome扩展0x01

简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序&#xff0c;无论是测试应用程序、搜寻漏洞还是收集情报&#xff0c;它们都能提升工作流程。 FoxyProxy 代理管理工具&#xff0c;此扩展简化了使用代理&#xff08;如 Burp…...

Linux基础开发工具——vim工具

文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...

SQL进阶之旅 Day 22:批处理与游标优化

【SQL进阶之旅 Day 22】批处理与游标优化 文章简述&#xff08;300字左右&#xff09; 在数据库开发中&#xff0c;面对大量数据的处理任务时&#xff0c;单条SQL语句往往无法满足性能需求。本篇文章聚焦“批处理与游标优化”&#xff0c;深入探讨如何通过批量操作和游标技术提…...