10 Java数据结构(下):集合进阶之Map(双列集合)系列:

news2024/9/21 16:37:50

文章目录

  • 前言
  • 一、 Map(双列集合)接口
    • 1 常用方法
    • 2 遍历方式
      • (1)使用map.keySet()方法
      • (2)使用map.entrySet()方法
      • (3)lambda表达式遍历(这个最简单)
    • 3 实现类:HashMap、LinkedHashMap、TreeMap
      • (1)HashMap
        • ---- HashMap的特点
        • ---- HashMap的底层原理
        • ---- 特别注意:自定义类作为键的处理方案
        • ---- 练习
      • (2)LinkedHashMap
        • ---- LinkedHashMap的特点
        • ---- 底层原理
        • ---- 特别注意:自定义类作为键的处理方案
      • (3)TreeMap
        • ---- TreeMap的特点
        • ---- TreeMap的两种排序规则
        • ---- 自定义对象作为TreeMap的键的处理
        • ---- 练习
  • 二、 源码详解
    • 1 HashMap源码
    • 2 TreeMap源码


前言

  • 双列集合的特点
    (1)双列集合一次需要存一对数据,分别为键和值
    (2)键不能重复,值可以重复
    (3)键和值是一一对应的,每一个键只能找到自己对应的值
    (4)键+值这个整体我们称之为“键值对”或者“键值对对象”,在Java中叫做“Entry对象”

在双列集合的体现中,一个接口、三个实现类在这里插入图片描述

一、 Map(双列集合)接口

Map系列的常用方法,我们只要学习这个最顶层的接口里面有的。底下的实现类里面没有什么特殊方法。

1 常用方法

Map是双列集合的顶层接口,它的功能是全部双列集合都可以继承使用的

方法名 说明
v put(K key,v value) 添加元素(添加) 或者 根据指定已经存在的键修改对应的值(修改覆盖)
v remove(object key) 根据键删除键值对元素
void clear() 移除所有的键值对元素
boolean containsKey(object key) 判断集合是否包含指定的键
boolean containsvalue(object value) 判断集合是否包含指定的值
boolean isEmpty() 判断集合是否为空
int size() 集合的长度,也就是集合中键值对的个数
v get(Object key) 返回指定键映射到的值,如果此map不包含键的映射,则返回 null。

关于put方法需要单独讲一下,其有添加元素和修改元素两个功能

  • put方法的细节:添加、覆盖
    (1)在添加数据的时候,如果键不存在,那么直接把键值对对象添加到map集合当中,方法返回null
    (2)在添加数据的时候,如果键是存在的,那么会把原有的键值对对象覆盖,会把被覆盖的值进行返回。

  • 关于get方法我喜欢和Objects工具类里面的判null方法Objects.isNull(obj)一起用。

Map<String,String> map = new HashMap<>();
        
// put方法
map.put("郭靖","黄蓉");
map.put("韦小宝","沐剑屏");
map.put("张无忌","周芷若");
map.put("杨过","小龙女");
map.put("令狐冲","任盈盈");

System.out.println(map);  // {韦小宝=沐剑屏, 令狐冲=任盈盈, 张无忌=周芷若, 杨过=小龙女, 郭靖=黄蓉}

map.put("韦小宝","双儿");  // key相同,value覆盖
System.out.println(map);  // {韦小宝=双儿, 令狐冲=任盈盈, 张无忌=周芷若, 杨过=小龙女, 郭靖=黄蓉}

// remove方法
map.remove("韦小宝");  // 删除key为韦小宝的键值对
System.out.println(map);  // {令狐冲=任盈盈, 张无忌=周芷若, 杨过=小龙女, 郭靖=黄蓉}

// get方法
System.out.println(map.get("郭靖"));  // 黄蓉
System.out.println(map.get("韦小宝"));  // null

if (Objects.isNull(map.get("韦小宝"))) {
   
    System.out.println("韦小宝不存在"); // 韦小宝不存在
} else {
   
    System.out.println("韦小宝存在");
}

2 遍历方式

(1)使用map.keySet()方法

  • Set <K> keySet() : 返回此map中包含的所有键组成的Set单列集合。
Map<String,String> map = new HashMap<>();

// put方法
map.put("郭靖","黄蓉");
map.put("韦小宝","沐剑屏");
map.put("张无忌","周芷若");
map.put("杨过","小龙女");
map.put("令狐冲","任盈盈");

System.out.println(map);  // {令狐冲=任盈盈, 韦小宝=沐剑屏, 杨过=小龙女, 郭靖=黄蓉, 张无忌=周芷若}

// 遍历

// 1. keySet()方法
/*
Set<String> keySet = map.keySet();
for (String key : keySet) {
    System.out.println(key + " : " + map.get(key));
}
*/

// 快捷键: 集合对象.keySet().for
for (String s : map.keySet()) {
   
    System.out.println(s + " : " + map.get(s));
}


/*// 快捷键: map.keySet().forEach
map.keySet().forEach(s -> System.out.println(s + " : " + map.get(s)));*/

// 迭代器版本就不写了

/*
令狐冲 : 任盈盈
韦小宝 : 沐剑屏
杨过 : 小龙女
郭靖 : 黄蓉
张无忌 : 周芷若   */

(2)使用map.entrySet()方法

  • Set<Map.Entry<K,V>> entrySet() :返回此map中包含的所有键值对(Entry对象)组成的Set单列集合。
  • Entry.getKey() : 获取键
  • Entry.getValue() : 获取值
Map<String,String> map = new HashMap<>();

// put方法
map.put("郭靖","黄蓉");
map.put("韦小宝","沐剑屏");
map.put("张无忌","周芷若");
map.put("杨过","小龙女");
map.put("令狐冲","任盈盈");

System.out.println(map);  // {令狐冲=任盈盈, 韦小宝=沐剑屏, 杨过=小龙女, 郭靖=黄蓉, 张无忌=周芷若}

// 遍历

/*
// entrySet()方法
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String

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

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

相关文章

Spring之SpringSecurity

SpringSecurity相关 一、SpringSecurity简介二、SpringSecurity主要功能三、SpringSecurity的Maven依赖四、Security本质&#xff1a;过滤器链五、用户认证1、根据用户实体&#xff0c;封装一个UserDetails实体对象LoginUser类2、自定义UserDetailsService接口的实现 一、Sprin…

[笔记]基于小波分析的基频识别

原文&#xff1a;基于小波分析的油田机械传动装置振动信号识别方法&#xff0c;科技资讯&#xff0c;202305&#xff0c;赵磊 摘要:为提高油田机械设备运行的稳定性与高效性&#xff0c;分析传动装置的运行特性该研究设计了一种基于小波分析的油田传动装置振动信号识别方法。应…

企业选择软件测试外包公司有什么好处软件测评服务公司推荐

软件测试外包公司是专门为企业提供软件测试服务的第三方机构&#xff0c;帮助企业提高软件质量&#xff0c;降低开发和维护成本。以卓码软件测评为例&#xff0c;公司致力于为客户提供全面的软件测试解决方案&#xff0c;包括项目验收测试、软件确认测试、安全测试、性能测试和…

[HZNUCTF 2023 preliminary]ppppop

[HZNUCTF 2023 preliminary]ppppop 点进去之后是一片空白 接着我们打开HackBar 然后我们看到cookie里面有一个base64编码&#xff1a; Tzo0OiJVc2VyIjoxOntzOjc6ImlzQWRtaW4iO2I6MDt9利用在线工具解码得到&#xff1a; O:4:"User":1:{s:7:"isAdmin";b:…

FreeRTOS实战项目CRTP协议移植(实现使用串口传输数据包)

文章目录 一、CRTP 协议①协议层次②端口分配 二、实现串口收发数据包2.1 数据包格式&#xff1a;2.2 如何传递数据包 三、CRTP处理数据过程3.1 CRTP处理数据流程示例&#xff1a;3.2 添加CRPT基本功能①链路初始化函数② CRTP层初始化③创建底层任务代码④ping服务⑤ 上机实验…

宝兰德多款仓颉开源项目获GitCode官方G-Star毕业认证,释放开发效率新动能

近日&#xff0c;由宝兰德基于仓颉编程语言开发的项目「Cangjie-TPC/redis-sdk」「Cangjie-TPC/hyperion」入驻GitCode平台&#xff0c;并获得GitCode官方优秀毕业项目认证&#xff0c;成为G-Star计划的一员&#xff0c;标志着宝兰德与GitCode将携手开启软件研发新纪元&#xf…

变频器会干扰补偿电容器正常工作吗

变频器&#xff08;VFD&#xff0c;Variable Frequency Drive&#xff09;可能会对补偿电容器的正常工作产生干扰。变频器工作时产生的谐波、快速开关操作和高频噪声都可能影响电容器的性能。 一、以下是变频器对补偿电容器可能产生的一些影响&#xff1a; 1、谐波干扰 谐波生…

JS基础之【基本数据类型与类型间的隐式显示转换】

&#x1f680; 个人简介&#xff1a;某大型国企高级前端开发工程师&#xff0c;7年研发经验&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主&#xff0c;华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码…

【Linux】初步识操作系统

linux专栏&#xff1a;《Linux入门系列》 系列文章&#xff1a;gdb-调试器初入门&#xff08;简单版使用&#xff09; 编辑器vim入门&#xff08;概念模式转换技巧&#xff09; 目录 1. 概念 2. 设计操作系统的目的 3. 定位&#xff1a;操作系统负责管理 4. 如何理解管理 …

Linux 数据结构 链表

1.段错误调试方法&#xff1a; 1.按照网上的方法配置Ubuntu&#xff0c;允许生成core文件 2.重新编译代码并加入-g选项(允许进行GDB调试) 3.ulimit -c unlimited 不限制core文件的生成的大小 4.执行代码,复现段错误,产生包含出错信息的core文件(检查cor…

呼叫系统怎么使用提高安全性

呼叫中心提高使用的安全性是一个综合性的任务&#xff0c;涉及技术、管理、人员等多个方面。以下是一些关键措施&#xff0c;旨在提升呼叫中心的安全性&#xff1a; 一、加强技术防护 1.数据加密&#xff1a;采用先进的加密技术对通话内容和数据传输进行加密&#xff0c;如使用…

浙大联合港中深发布AI医疗最新报告,全面审视「虚拟现实+人工智能」

想象一下&#xff0c;医生在手术前&#xff0c;通过虚拟现实技术&#xff0c;能够身临其境地预演手术过程&#xff0c;精确到每一个细节&#xff1b;患者则可以在VR环境中进行心理治疗&#xff0c;减轻焦虑与恐惧。 这一切&#xff0c;都得益于AI与VR的强强联手。 医学视觉增强…

今日分享丨微服务架构下查询数据缓存策略

引言 随着企业业务规模的扩大和复杂度的提升&#xff0c;微服务架构因其高可用性、可扩展性和易于维护的特性&#xff0c;逐渐成为现代软件开发的首选架构模式。然而&#xff0c;微服务架构带来的分布式特性也增加了数据访问的复杂性和延迟。特别是业务查询领域&#xff0c;一…

HIS系统成品|HIS系统搭建|医院HIS系统开发

在医疗信息化的浪潮中&#xff0c;医院信息系统&#xff08;HIS&#xff09;的开发功能分析成为关键。本文将探讨如何通过功能分析构建一个高效、智能的HIS系统&#xff0c;以满足现代医院的需求&#xff0c;并提升医疗服务质量。 1、HIS系统功能分析的必要性 在医疗行业中&am…

基于java的进销存管理系统设计与实现

需求分析 进销存主要是帮助商业企业全面有效管理采购、销售和库存&#xff0c;软件适用于需要进行采购管理&#xff0c;销售管理以及库存管理的所有商业企业。 进销存系统的产生和发展情况 进销存软件是一款通用性极强的商业企业进销存管理系统&#xff0c;软件囊括了商业企业…

第六届机器人与智能制造技术国际会议 (ISRIMT 2024)

重要信息 大会官网&#xff1a;www.isrimt.org&#xff08;点击了解大会&#xff0c;参会&#xff0c;投稿等信息&#xff09; 大会时间&#xff1a;2024年9月20-22日 大会地点&#xff1a;中国-江苏常州 收录检索&#xff1a;IEEE Xplore, EI Compendex, Scopus 大会简介…

航空公司名字趣史:看看有趣又有意义的命名背后有什么玄机

上周“东海航空”事件引发了东方航空在社交媒体上的一系列被迫营业&#xff0c;因为媒体的乌龙报道误将“东海航空”简称为“东航”&#xff0c;甚至直接用错了图片。众号&#xff1a;标猿公司起名 给公司起个好名字 其实除了大部分以地域、国家命名的航空公司&#xff0c;还…

Java 8 Optional用法【总结记录】

一、前言 这里引用书中描述来介绍Optional类&#xff1a; Optional是为核心类库设计的一个数据类型&#xff0c;用来替换null值。人们对原有的null值有很多抱怨&#xff0c;甚至连发明这一概念的Tony Hoare也是如此&#xff0c;他曾说这是自己的一个“价值连城的错误”。作为一…

cad导出图片格式怎么导出?5个软件帮助你快速转换文件格式

cad导出图片格式怎么导出&#xff1f;5个软件帮助你快速转换文件格式 将CAD文件导出为图片格式可以帮助你更方便地展示、分享或打印设计图纸。CAD&#xff08;Computer-Aided Design&#xff09;文件通常以DWG或DXF格式保存&#xff0c;而要将它们转换为常见的图片格式&#x…

NodeJS “次元高校”社团管理系统 ---附源码94897

摘要 计算机科学技术的飞速发展也更好地促进了高校信息化建设。为了适应新形势下更好地培养人才&#xff0c;高校在发展的过程中开始推进信息系统的建设。随着我国教育模式的不断改革和发展&#xff0c;越来越多的高校正在开展校园信息工程建设&#xff0c;以更好地提高高校的各…