第7章-第6节-Java中的Map集合

1、HashMap:

1)、 引入

如果业务需要我们去用姓名的拼音手写字母匹配完整姓名,那么如果用单列数据,我们可能需要两个集合才能存储,而且两个集合之间没有关联不好操作,这种时候双列数据就会起很大作用

2)、 单列数据与双列数据

3)、map概述

Map :映射。跟 Collections 体系的集合,是不一样的。是以key-value的形式保存数据的,常常称之为键值对。

4)、 HashMap概念及特点

概述:HashMap实现了Map接口,是Map子类中使用最最最多的。

数据结构:key部分使用的数据结构为:数组+双向链表+红黑树 。HashSet使用的就是key部分进行存储的。

存储数据特点

  • 键值对映射关系

  • 一个键对应一个值

  • 键不能重复,值可以重复

  • 键允许为空值

  • 元素存取无序

5)、 方法的使用

方法名说明
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)根据键获取值
Set<K> keySet()获取所有键的集合
Collection<V> values()获取所有值的集合
Set<Map.Entry<K,V>> entrySet()获取所有键值对对象的集合

 6)、增加

import java.util.HashMap;
import java.util.Map;public class AddDemo {public static void main(String[] args) {// 定义一个map对象,key存放字符串类型,value存放Integer类型Map<String, Integer> map = new HashMap<>();map.put("a", 5);map.put("c", 2);map.put("e", 6);map.put(null, 0);map.put(null, 2);System.out.println(map);// 定义一个map,key存放字符串类型,value存放字符串类型Map<String, String> map1 = new HashMap<>();map1.put("java", "企业级系统开发");map1.put("Python", "人工智能");map1.put("go", "字节跳动");map1.put(null, null);// key不存在就添加(key存在,如果value值为null,也会添加)map1.putIfAbsent(null, "哈哈");System.out.println(map1);}
}

7)、删除

import java.util.HashMap;
import java.util.Map;public class RemoveDemo {public static void main(String[] args) {// 定义一个map,key存放字符串类型,value存放字符串类型Map<String, String> map = new HashMap<>();map.put("001", "唐海峰");map.put("002", "张三丰");map.put("003", "张无忌");map.put("004", "东方不败");// 根据键值删除,返回被删除的元素String content = map.remove("001");System.out.println(content);System.out.println(map);// 根据键值对删除,返回一个Boolean类型的结果boolean flag = map.remove("004", "东方不败");System.out.println(flag);System.out.println(map);// 清空集合map.clear();System.out.println(map);}
}

8)、修改

import java.util.HashMap;
import java.util.Map;public class UpdateDemo {public static void main(String[] args) {// 定义一个map,key存放字符串类型,value存放字符串类型Map<String, String> map = new HashMap<>();map.put("001", "唐海峰");map.put("002", "张三丰");map.put("003", "张无忌");map.put("004", "东方不败");System.out.println(map);// 修改(存在就修改,不存在就添加)String content = map.put("001", "唐延");System.out.println(content);System.out.println(map);// 根据key查找,替换指定key值的内容String con = map.replace("006", "唐海峰");System.out.println(con);System.out.println(map);// 根据key,value查找,替换指定的值map.replace("001", "唐延", "tarnett");System.out.println(map);}
}

9)、查询

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class SelectDemo {public static void main(String[] args) {// 定义一个map,key存放字符串类型,value存放字符串类型Map<String, String> map = new HashMap<>();map.put("001", "唐海峰");map.put("002", "张三丰");map.put("003", "张无忌");map.put("004", "东方不败");System.out.println(map);// 获取指定key对应的值String content = map.get("001");System.out.println(content);// 获取集合的长度,获取key的长度System.out.println(map.size());// 查询是否包含指定的keySystem.out.println(map.containsKey("006"));// 判断是否为空System.out.println(map.isEmpty());// 获取所有的keySet<String> keySet = map.keySet();System.out.println(keySet);// 获取所有的值Collection<String> values = map.values();System.out.println(values);}
}

 2、两种遍历:

1)、通过key获取值

import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class KetSetDemo {public static void main(String[] args) {Map<String, String> map = new HashMap<>();map.put("001", "唐海峰");map.put("002", "张三丰");map.put("003", "张无忌");map.put("004", "东方不败");// 获取所有的keySet<String> keySet = map.keySet();// 遍历keySet,通过key获取valuefor(String key : keySet){String value = map.get(key);System.out.println(value);}}
}

2)、获取所有的键值对

import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class EntryDemo {public static void main(String[] args) {Map<String, String> map = new HashMap<>();map.put("001", "唐海峰");map.put("002", "张三丰");map.put("003", "张无忌");map.put("004", "东方不败");// 获取所有的键值对Set<Map.Entry<String, String>> entrySet = map.entrySet();// 遍历键值对for(Map.Entry<String, String> entry : entrySet){// 通过键值对对象获取key和valueSystem.out.println("key = " + entry.getKey() + " : " + entry.getValue());}}
}

3)、HashMap保存各种数据类型:

1>、键是String,值为自定义类型

import java.util.HashMap;
import java.util.Set;/*** 键是String,值为自定义类型*/
public class Test01 {public static void main(String[] args) {HashMap<String, Student> map = new HashMap<>();map.put("001", new Student("zhangsan", 21));map.put("002", new Student("lisi", 22));map.put("003", new Student("wangwu", 23));System.out.println(map);// 遍历Set<String> keySet = map.keySet();for(String key : keySet) {System.out.println(map.get(key));}}
}

2>、键是String,值为ArrayList

import java.util.*;/*** 键是String,值为ArrayList*/
public class Test02 {public static void main(String[] args) {Map<String, List<String>> map = new HashMap<>();List list1 = new ArrayList();list1.add("孙悟空");list1.add("猪八戒");map.put("西游记", list1);List list2 = new ArrayList();list2.add("赵云");list2.add("马超");map.put("三国演义", list2);// 遍历Set<String> keySet = map.keySet();for(String key : keySet) {List<String> list = map.get(key);for (String value : list) {System.out.println(value);}}}
}

3>、ArrayList嵌套HashMap

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class Test03 {public static void main(String[] args) {List<HashMap<String, String>> list = new ArrayList<>();HashMap<String, String> map1 = new HashMap<>();map1.put("杨过", "小龙女");map1.put("郭靖", "黄蓉");list.add(map1);HashMap<String, String> map2 = new HashMap<>();map2.put("java", "系统开发");map2.put("go", "字节跳动");list.add(map2);System.out.println(list);}
}

本电子书目录:《Java基础的重点知识点全集》

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

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

相关文章

【前端素材】bootstrap4实现服装鞋饰电商平台Doron

一、需求分析 一个服装鞋饰电子商务页面是一个在线平台&#xff0c;用于展示和销售各种服装、鞋子和配饰产品。它通常具有以下功能&#xff1a; 产品展示&#xff1a;服装鞋饰电子商务页面会展示各种服装、鞋子和配饰产品的图片、描述和价格。这些产品可以按照不同的分类&#…

批量剪辑方法:掌握视频剪辑技巧,按指定时长轻松分割视频

在视频制作和编辑过程中&#xff0c;经常要批量处理和剪辑大量的视频片段。学会批量剪辑方法可以提高工作效率&#xff0c;还可以使视频编辑更加准确和高效。下面来看下云炫AI智剪如何按指定时长轻松分割视频的批量剪辑方法。 分割后的视频文件效果&#xff0c;已分割分段的视…

PHPStudy快速搭建网站并结合内网穿透远程访问本地站点

文章目录 [toc]使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点&#xff0c;测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中&#xff0c;查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2…

减少客户流失并留住长期客户:实用策略与实践分享

一、什么是客户流失&#xff1f; 客户流失是指客户停止付费并离开您的产品/服务。流失率是指在特定时间内离开产品/服务的用户除以用户总数的百分比。 比如&#xff1a; 假设某媒体平台是一个基于订阅的流媒体平台&#xff0c;为用户提供各种电影、电视剧、纪录片等。到二月…

Linux--防火墙,实验案例:基于区域、服务、端口的访问控制

实验环境 某公司的Web服务器&#xff0c;网关服务器均采用Linux CentOS 7.3操作系统&#xff0c;如图2.13所示。为了 加强网络访问的安全性&#xff0c;要求管理员熟悉firewalld防火墙规则的编写&#xff0c;以便制定有效、可行的主机防护策略。 需求描述 > 网关服务器ens3…

RT-Thread:ADC 框架应用,通过 STM32CubeMX 配置 STM32 ADC驱动

关键词&#xff1a;ADC,RT-Thread ADC,STM32 ADC应用 说明&#xff1a;本笔记是记录如何开启 RT-Thread 框架的ADC功能&#xff0c;使用系统自带的ADC函数&#xff0c;并通过 STM32CubeMX 配置 STM32 ADC驱动 。 1. 打开board.h 文件&#xff0c;找到ADC 使用配置的流程&…

猴子选大王

思路&#xff1a;首先举个例子&#xff1a;当N 5 时 1 2 3 4 5 3 3 3 3 输出4 请观看代码 …

37-数据类型,一元运算符typeof,字符串string,布尔Boolean,未定义undefined,空null,数组Array

<body><script>// 0.1加0.2不等于0.3&#xff0c;正确的运算方法如下console.log(0.10.2);var x 0.1;var y 0.2;console.log((x*10y*10)/10);</script> </body> 简单数据类型&#xff08;5种&#xff09;&#xff1a;数字number&#xff0c;字符串s…

【漏洞挖掘】sourcemap、webpck源码泄露漏洞

目录 1.使用npm安装reverse-souecemap1.1 安装npm1.2 npm配置优化1.2.1 全局模块存放路径和cache路径1.2.2 更改镜像源1.2.3 升级更新npm&#xff0c;并添加环境变量 1.3 安装 reverse-sourcemap 2. 使用reverse-sourcemap逆向获取源码3. 漏洞修复 1.使用npm安装reverse-souece…

基于 Python+Neo4j+医药数据,构建了一个知识图谱的自动问答系统

知识图谱是目前自然语言处理的一个热门方向。目前知识图谱在各个领域全面开花&#xff0c;如教育、医疗、司法、金融等。 本项目立足医药领域&#xff0c;以垂直型医药网站为数据来源&#xff0c;以疾病为核心&#xff0c;构建起一个包含7类规模为4.4万的知识实体&#xff0c;…

llama.cpp模型推理之界面篇

目录 前言 一、llama.cpp 目录结构 二、llama.cpp 之 server 学习 1. 介绍 2. 编译部署 3. 启动服务 4、扩展或构建其他的 Web 前端 5、其他 前言 在《基于llama.cpp学习开源LLM本地部署》这篇中介绍了基于llama.cpp学习开源LLM本地部署。在最后简单介绍了API 的调用方…

智汇云舟受邀出席《城市轨道交通公共安全防范安全评价标准》专家评审会

1月3日&#xff0c;由中国城市公共交通协会归口的《城市轨道交通公共安全防范安全评价标准》&#xff08;以下简称“《标准》”&#xff09;送审稿审查会顺利召开。该标准由同方威视技术股份有限公司、上海新海信通信息技术有限公司和中安保实业集团有限公司主编&#xff0c;北…

python进阶 -- 日志装饰器详解

日志 日志&#xff1a;记录程序运行的时候&#xff0c;出现的问题&#xff0c;或者说验证流程是否正常 在实际工作中&#xff0c;python的脚本命令一般是放在服务器执行的linux系统 日志其实就是记录程序运行时出现的问题、或者正常的打印&#xff0c;协助出现问题的时解决排查…

AMEYA360 | 热敏电阻的工作原理及作用 热敏电阻厂商有哪些

摘要&#xff1a;热敏电阻是一种传感器电阻&#xff0c;其电阻值随着温度的变化而改变。热敏电阻的工作原理是使用传感器来帮助调节温度高低&#xff0c;作用包括电压调节&#xff0c;音量控制&#xff0c;时间延迟和电路保护。热敏电阻具有测温、温度补偿、过热保护、液面测量…

ArrayList 与 LinkedList 区别?

如果你现在需要准备面试&#xff0c;可以关注我的公众号&#xff1a;”Tom聊架构“&#xff0c;回复暗号&#xff1a;”578“&#xff0c;领取一份我整理的50W字面试宝典&#xff0c;可以帮助你提高80%的面试通过率&#xff0c;价值很高&#xff01;&#xff01; 是否保证线程安…

竞赛保研 基于深度学习的人脸识别系统

前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的人脸识别系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/…

如何脱离keil在vscode上实现STM32单片机编程

【VScode Embedded IDE】Keil工程导入VScode&#xff0c;与Keil协同开发MCU_vscode编辑keil工程-CSDN博客 从零开始的51单片机——VsCodeEIDE环境搭建_vscodeeidesdcc-CSDN博客 结合一下这两个大佬的博客就是可以实现STM32的编程了 主要要点&#xff1a; &#xff08;1&#…

为什么要有虚拟线程(Java项目Loom)?

JEP No 425 是我期待已久的东西。这是 JDK 19 的并发 API 中添加的一个新概念。它处于预览阶段&#xff0c;很快它将在未来的几个版本中成为 JDK 中的永久功能。 虚拟线程非常轻量级&#xff0c;可以减少编写、维护和观察高吞吐量应用程序的工作量。 在这一部分中&#xff0c…

Spring——Spring整合MyBatis

Spring整合MyBatis 1.创建工程 1.1.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"…

HarmonyOS 编写副标题 解决 ubTitle 可能淘汰问题

目前 harmonyos 中 title属性目前用的还正常 但是ubTitle副标题 会提示我们 可能要淘汰了 虽然说 我们目前 强行用 还是可以生效 但可能 哪天版本更新移除了这个属性 代码就报错了 我们可以通过Builder 来写这个副标题 和 标题 Entry Component struct Index {build() {Row(…