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

【从入门到起飞】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
  • 🍔特点
    • ⭐两种排序规则

在这里插入图片描述

🌺双列集合的特点

在这里插入图片描述

  1. 双列集合一次需要存一对数据,分别是键和值
  2. 键不能重复,值可以重复
  3. 键和值是一一对应的,每一个键都能找到自己对应的值
  4. 键+值 这个整体我们称为"键值对"或者"键值对对象",在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的使用方法

&#x1f38a;专栏【Java基础】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【The truth that you leave】 &#x1f970;欢迎并且感谢大家指出我的问题 文章目录 &#x1f33a;双列集合的特点&#x1f384;Map&#x1f354;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在后续组装过程中&#xff0c;连接器发生脱落。在对同批次的样品进行推力测试后&#xff0c;发现连接器推力有偏小的现象。据此进行失效分析&#xff0c;明确FPC连接器脱落原因。 #1、#2样品连接器脱落连接器脱落&#xff1b;#3样品连接器未脱落&#xff1b;…...

Java爬虫框架下代理使用中的TCP连接池问题及解决方案

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

PostgreSQL 数据定义语言 DDL

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

设计模式-行为型模式-策略模式

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

ResizeObserver观察元素宽度的变化

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

斐波那契数列,剑指offer,力扣

目录 题目地址&#xff1a; 我们直接看题解吧&#xff1a; 解题方法&#xff1a; 难度分析&#xff1a; 审题目事例提示&#xff1a; 解题思路&#xff08;动态规划&#xff09;&#xff1a; 代码实现&#xff1a; 补充说明&#xff1a; 代码&#xff08;优化&#xff09;&…...

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、网络测试 可使用抓包工具辅助网格测试推荐&#xff1a;fiddler&#xff0c;Charles &#xff08;1&#xff09;网络切换2G-3G-4G-wifi-网络信号差--无网&#xff08;2&#xff09;网络信号弱关注是否出现ANR、crash 2、中断测试 &#xff08;1&#xff09;…...

WordPress网站迁移实战经验

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

3D全景视角,足不出户感知真实场景的魅力

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

C编译环境和预处理(非常详细,建议收藏)

C编译环境和预处理&#xff08;非常详细&#xff0c;建议收藏&#xff09; 一、程序的翻译环境和执行环境二、 详解编译链接2.1 翻译环境2.2 编译本身的几个阶段符号汇总、符号表、合并段表、符号表的合并和重定位分别是什么&#xff1f; 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. 一个实际的需求 问题&#xff1a;     编写的五子棋程序中&…...

MySQL的执行器是怎么工作的

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

【目标测距】雷达投影测距

文章目录 前言一、读取点云二、点云投影图片三、读取检测信息四、点云投影测距五、学习交流 前言 雷达点云投影相机。图片目标检测&#xff0c;通过检测框约束等等对目标赋予距离。计算消耗较大&#xff0c;适合离线验证操作。在线操作可以只投影雷达检测框。 一、读取点云 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组态 一、什么是人机界面 人机界面是指人与机器或系统之间的交互界面。它是人类与计算机或其他设备之间进行信息交换…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么&#xff0c;为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中&#xff0c;我们在使用电子设备时&#xff0c;我们所输入执行的每一条指令最终大多都会作用到硬件上&#xff0c;比如下载一款软件最终会下载到硬盘上&am…...