【从入门到起飞】JavaSE—带你了解Map,HashMap,TreeMap的使用方法
🎊专栏【Java基础】
🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。
🎆音乐分享【The truth that you leave】
🥰欢迎并且感谢大家指出我的问题
文章目录
- 🌺双列集合的特点
- 🎄Map
- 🍔Map常用的API
- ⭐创建Map集合的对象
- ⭐添加元素
- ✨注意
- ⭐移除元素
- ⭐清空元素
- ⭐判断是否存在某个 键 / 值
- ⭐判断集合是否为空
- ⭐判断集合的长度
- 🍔Map的遍历方式
- ⭐方法一:键找值
- ⭐方法二:键值对
- ✨分析一下Map.Entry<String,String>
- ⭐方法三:Lambda表达式
- ✨分析一下new BiConsumer<String, String>()
- 🎄HashMap
- 🍔特点
- 🍔例子
- ⭐注意
- 🎄LinkHashMap
- 🍔特点
- 🎄TreeMap
- 🍔特点
- ⭐两种排序规则

🌺双列集合的特点
- 双列集合
一次需要存一对数据
,分别是键和值 - 键不能重复,值可以重复
- 键和值是一一对应的,每一个键都能找到自己对应的值
- 键+值 这个整体我们称为"键值对"或者"键值对对象",在Java中称为"Entry对象"
🎄Map
🍔Map常用的API
⭐创建Map集合的对象
⭐添加元素
put("元素1","元素2");
✨注意
在添加元素的时候,如果键不存在,那么直接把 键值对对象 添加到map集合中,方法返回null
在添加元素的时候,如果键是存在
的,那么会把 原来的键值对对象覆盖
,把被覆盖的值
进行返回
⭐移除元素
remove("元素");
⭐清空元素
clear();
⭐判断是否存在某个 键 / 值
⭐判断集合是否为空
⭐判断集合的长度
size();
🍔Map的遍历方式
⭐方法一:键找值
package com.practice;import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class practicedemo {public static void main(String[] args) {Map<String,String>map=new HashMap<>();map.put("1","2");map.put("3","4");map.put("5","6");//通过键找值//获取所有的键,把这些键都放到一个单列集合中Set<String>keys=map.keySet();for(String key:keys){//利用map集合中的键获取对应的值 getString value=map.get(key);System.out.println(key+"="+value);}}
}
⭐方法二:键值对
package com.practice;import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class practicedemo {public static void main(String[] args) {Map<String,String>map=new HashMap<>();map.put("1","2");map.put("3","4");map.put("5","6");//通过键值对//获取所有的键值对对象,返回一个Set集合Set<Map.Entry<String,String>> entries = map.entrySet();//遍历entries这个集合,去得到里面的每一个键值对对象for (Map.Entry<String,String>entry:entries){//通过entry调用get方法获取键和值String key=entry.getKey();String value=entry.getValue();System.out.println(key+"+"+value);}}
}
✨分析一下Map.Entry<String,String>
所以我们在表示Entry类型的时候,要使用Map(外部接口) . Entry
去调用一下
⭐方法三:Lambda表达式
package com.practice;import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;public class practicedemo {public static void main(String[] args) {Map<String,String>map=new HashMap<>();map.put("1","2");map.put("3","4");map.put("5","6");//通过lambda表达式//匿名内部类的方式map.forEach(new BiConsumer<String, String>() {@Overridepublic void accept(String s, String s2) {System.out.println(s+"="+s2);}});System.out.println("----------------------------");map.forEach((String s, String s2) -> {System.out.println(s+"="+s2);});System.out.println("----------------------------");map.forEach(( s, s2) -> System.out.println(s+"="+s2));}
}
✨分析一下new BiConsumer<String, String>()
为什么是new BiConsumer<String, String>()
我们来查看一下forEach的源码
继续查看BiConsumer的源码
Lambda表达式只能用于实现只有一个抽象方法的接口,因为BiConsumer是一个接口,所以可以使用Lambda表达式
🎄HashMap
🍔特点
- HashMap是Map里面的一个实现类
- 方法可以直接使用Map里面的方法
- 特点都是由 键 决定的:无序,不重复,无索引
🍔例子
⭐注意
- HashMap底层是哈希表结构的
- 依赖hashCode方法和equals方法保证
键的唯一
- 如果
键
存储的是自定义对象,需要
重写hashCode和equals方法 - 如果
值
存储的是自定义对象,不需要
重写hashCode和equals方法
Student.java
package com.itheima.a02myhashmap;import java.util.Objects;public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {this.age = age;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age && Objects.equals(name, student.name);}@Overridepublic int hashCode() {//return Objects.hash(name, age);return name.hashCode();}public String toString() {return "Student{name = " + name + ", age = " + age + "}";}
}
A01_HashMapDemo1.java
package com.itheima.a02myhashmap;import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class A01_HashMapDemo1 {public static void main(String[] args) {/*需求:创建一个HashMap集合,键是学生对象(Student),值是籍贯(String)。存储三个键值对元素,并遍历要求:同姓名,同年龄认为是同一个学生核心点:HashMap的键位置如果存储的是自定义对象,需要重写hashCode和equals方法。*///1.创建HashMap的对象HashMap<Student,String> hm = new HashMap<>();//2.创建三个学生对象Student s1 = new Student("zhangsan",23);Student s2 = new Student("lisi",24);Student s3 = new Student("wangwu",25);Student s4 = new Student("wangwu",25);//3.添加元素hm.put(s1,"江苏");hm.put(s2,"浙江");hm.put(s3,"福建");hm.put(s4,"山东");//4.遍历集合Set<Student> keys = hm.keySet();for (Student key : keys) {String value = hm.get(key);System.out.println(key + "=" + value);}System.out.println("--------------------------");Set<Map.Entry<Student, String>> entries = hm.entrySet();for (Map.Entry<Student, String> entry : entries) {Student key = entry.getKey();String value = entry.getValue();System.out.println(key + "=" + value);}System.out.println("--------------------------");hm.forEach((student, s)-> System.out.println(student + "=" + s));}
}
🎄LinkHashMap
🍔特点
- 由键决定:有序,不重复,无索引
- 这里的有序是指保证存储和取出的元素顺序一致
🎄TreeMap
🍔特点
- TreeMap和TreeSet底层原理一样,都是红黑树结构的
- 由键决定特性:不重复,无索引,可排序
- 可排序是可以
对键
进行排序,默认按照键从小到大排序,也可以自己定义键的排序规则
⭐两种排序规则
- 实现Comparable接口,指定比较规则
- 创建集合时传递Comparator比较器对象,指定比较规则
默认是升序排列
加上比较器后,可以变成降序排序
对比一下
HashMap效率高但是TreeMap可以排序,使用时要有所甄别
相关文章:

【从入门到起飞】JavaSE—带你了解Map,HashMap,TreeMap的使用方法
🎊专栏【Java基础】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【The truth that you leave】 🥰欢迎并且感谢大家指出我的问题 文章目录 🌺双列集合的特点🎄Map🍔Ma…...

[Docker]六.Docker自动部署nodejs以及golang项目
一.自动部署nodejs 1.创建node项目相关文件 app.js代码如下: var express require(express);var appexpress();app.get(/,function(req,res){res.send(首页update); }) app.get(/news,function(req,res){res.send(首页); })//docker做端口映射的时候不要指定ip app.listen(30…...

FPC焊点剥离失效分析
一、案例背景 FPC在后续组装过程中,连接器发生脱落。在对同批次的样品进行推力测试后,发现连接器推力有偏小的现象。据此进行失效分析,明确FPC连接器脱落原因。 #1、#2样品连接器脱落连接器脱落;#3样品连接器未脱落;…...

Java爬虫框架下代理使用中的TCP连接池问题及解决方案
引言 当使用Java爬虫框架进行代理爬取时,可能会遇到TCP连接池问题,导致"java.net.BindException: Cannot assign requested address"等错误。本文将介绍如何以爬取小红书为案例,解决Java爬虫框架中代理使用中的TCP连接池问题&…...

PostgreSQL 数据定义语言 DDL
文章目录 表创建主键约束非空唯一约束检查约束外键约束默认值约束 触发器表空间构建表空间 视图索引索引的基本概念索引的分类创建索引 物化视图 表创建 PostgreSQL表的构建语句与所有数据库都一样,结构如下,其核心在于构建表时,要指定上一些…...

设计模式-行为型模式-策略模式
一、什么是策略模式 策略模式是一种行为设计模式,它允许在运行时选择算法或行为,并将其封装成独立的对象,使得这些算法或行为可以相互替换,而不影响使用它们的客户端。(ChatGPT生成) 主要组成部分ÿ…...

ResizeObserver观察元素宽度的变化
ResizeObserver观察元素宽度的变化 ResizeObserver观察元素宽度的变化 ResizeObserver观察元素宽度的变化 ResizeObserver 构造函数创建一个新的 ResizeObserver 对象,它可以用于监听 Element 内容盒或边框盒或者 SVGElement 边界尺寸的大小。查看详细说明 案例 &l…...

斐波那契数列,剑指offer,力扣
目录 题目地址: 我们直接看题解吧: 解题方法: 难度分析: 审题目事例提示: 解题思路(动态规划): 代码实现: 补充说明: 代码(优化)&…...
Mac安装CocoaPods
安装HomeBrew 安装 % /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"安装失败 % /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"curl: (28) F…...
APP专项测试方法和工具的使用(测试新手必看)
APP专项测试 1、网络测试 可使用抓包工具辅助网格测试推荐:fiddler,Charles (1)网络切换2G-3G-4G-wifi-网络信号差--无网(2)网络信号弱关注是否出现ANR、crash 2、中断测试 (1)…...

WordPress网站迁移实战经验
前几日,网站服务器到期,换了服务商,就把我的WordPress的网站迁移到本地电脑了。方便以后文章迁移。 本次迁移网站主要经历以下几个步骤。 1.域名转出。 2.备份数据库及网站文件下载。 3.重新搭建WordPress网站。 4.网站文件及数据库导入。 下面详细介绍下每个步骤的操作…...

3D全景视角,足不出户感知真实场景的魅力
近年来,随着科技的快速发展,普通的平面静态视角已经无法满足我们了,不管是视角框架的限制还是片面的环境展示,都不足以让我们深入了解场景环境。随着VR全景技术的日益成熟,3D全景技术的出现为我们提供了全新的视觉体验…...

C编译环境和预处理(非常详细,建议收藏)
C编译环境和预处理(非常详细,建议收藏) 一、程序的翻译环境和执行环境二、 详解编译链接2.1 翻译环境2.2 编译本身的几个阶段符号汇总、符号表、合并段表、符号表的合并和重定位分别是什么? 2.2 运行环境 三、预处理详解3.1 预定义…...
LeetCode669. Trim a Binary Search Tree
文章目录 一、题目二、题解 一、题目 Given the root of a binary search tree and the lowest and highest boundaries as low and high, trim the tree so that all its elements lies in [low, high]. Trimming the tree should not change the relative structure of the …...

YOLOv8优化策略:轻量级Backbone改进 | VanillaNet极简神经网络模型 | 华为诺亚2023
🚀🚀🚀本文改进:一种极简的神经网络模型 VanillaNet,支持vanillanet_5, vanillanet_6, vanillanet_7, vanillanet_8, vanillanet_9, vanillanet_10, vanillanet_11等版本 🚀🚀🚀YOLOv8改进专栏:http://t.csdnimg.cn/hGhVK 学姐带你学习YOLOv8,从入门到创新,…...

【数据结构(二)】稀疏 sparsearray 数组(1)
文章目录 1. 稀疏数组的应用场景1.1. 一个实际的需求1.2. 基本介绍 2. 稀疏数组转换的思路分析3. 稀疏数组的代码实现3.1. 二维数组转稀疏数组3.2. 稀疏数组转二维数组 4. 课后练习 1. 稀疏数组的应用场景 1.1. 一个实际的需求 问题: 编写的五子棋程序中&…...

MySQL的执行器是怎么工作的
作为优化器后的真正执行语句的层,执行器有三种方式和存储引擎(一般是innoDB)交互 主键索引查询 查询的条件用到了主键,这个是全表唯一的,优化器会选择const类型来查询,然后while循环去根据主键索引的B树结…...

【目标测距】雷达投影测距
文章目录 前言一、读取点云二、点云投影图片三、读取检测信息四、点云投影测距五、学习交流 前言 雷达点云投影相机。图片目标检测,通过检测框约束等等对目标赋予距离。计算消耗较大,适合离线验证操作。在线操作可以只投影雷达检测框。 一、读取点云 py…...
uniapp、小程序canvas相关
1、圆形or圆形头像 //示例 const ctx uni.createCanvasContext(myCanvas); //canvas const round uni.upx2px(72) / 2; // 半径 const x uni.upx2px(92); //目标x轴位置 const y uni.upx2px(236); //目标y轴位置//if 图片是不是静态资源 async > const imgSrc https:/…...

[工业自动化-23]:西门子S7-15xxx编程 - 软件编程 - 西门子PLC人机界面交互HMI功能概述、硬件环境准备、软件环境准备
目录 一、什么是人机界面 二、什么是PLC人机交互界面HMI 三、人机界面设计的功能列表 四、开发主机与PLC的连接方式 五、开发主机与HMI的连接方式 六、HMI组态 一、什么是人机界面 人机界面是指人与机器或系统之间的交互界面。它是人类与计算机或其他设备之间进行信息交换…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...