Java中的Map(如果想知道Java中有关Map的知识点,那么只看这一篇就足够了!)
前言:在Java编程语言中,集合框架(Collection Framework)提供了一系列用于存储和操作数据的接口和类。其中,Map和Set是两个非常重要的接口,分别用于存储键值对和无重复元素的集合。
✨✨✨这里是秋刀鱼不做梦的BLOG
✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客
先让我们看一下本文大致的讲解内容:
目录
1.Map概念简介
(1)Map的定义
(2)Map.Entry的说明,>
(3)Map类在Java集合类中的关系
2.Map接口中常用API
3.Map的常见实现类
(1)HashMap
(2)LinkedHashMap
(3)TreeMap
4.Map的实际案例
5.总结
1.Map概念简介
(1)Map的定义
在开始学习如何使用Java中的Map类之前,先让我们了解一下什么是Java中的Map类:
——
Map类
是Java集合框架中的一部分,用于存储键值对(key-value pairs)。每个键(key)对应一个值(value),键是唯一的,但值可以重复。常见的Map
实现类包括HashMap、
LinkedHashMap
、TreeMap。
这里我们也附上官方文档中对Map的解释:Map (Java Platform SE 8 )
我相信读者如果初次学习Java中的Map类的话,可能对上面对Java中Map类的解释不能很好的理解,不过没有关系,读者继续向下阅读即可。
(2)Map.Entry<K, V>的说明
对于Map这种数据结构而言,其底层可以简单的理解为是由一个个节点进行构成的的树,而Map.Entry<K, V>就是其每一个节点。
对于Map.Entry<K, V>来说,其是Map内部实现的用来存放<key, value>键值对映射关系的内部类,该内部类中主要提供了<key, value>的获取,value的设置以及Key的比较方式:
方法 | 解释 |
---|---|
K getKey() | 返回 entry 中的 key |
V getValue() | 返回 entry 中的 value |
V setValue(V value) | 将键值对中的value替换为指定value |
(3)Map类在Java集合类中的关系
了解了Map的定义与Map.Entry<K, V>之后,在让我们看看Map在Java集合类中的关系,如下图:
从图中我们可以看出,Map类不在实现Collection接口,而是实现Map自身接口。
——通关上边的学习了解之后,这样我们就大致的了解了Java中的Map究竟是什么东西了。
2.Map接口中常用API
Map
接口提供了一些基本的方法,用于操作键值对。以下是Map
接口的主要方法:
方法 | 解释 |
---|---|
V get(Object key) | 返回 key 对应的 value |
V getOrDefault(Object key, V defaultValue) | 返回 key 对应的 value,key 不存在,返回默认值 |
V put(K key, V value) | 设置 key 对应的 value |
V remove(Object key) | 删除 key 对应的映射关系 |
Set<K> keySet() | 返回所有 key 的不重复集合 |
Collection<V> values() | 返回所有 value 的可重复集合 |
Set<Map.Entry<K, V>> entrySet() | 返回所有的 key-value 映射关系 |
boolean containsKey(Object key) | 判断是否包含 key |
boolean containsValue(Object value) | 判断是否包含 value |
这里我们对上述方法进行逐一使用代码进行解释:
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.Collection;public class MapMethodsExample {public static void main(String[] args) {// 创建一个 HashMap 实例Map<String, Integer> map = new HashMap<>();// V put(K key, V value): 设置 key 对应的 valuemap.put("apple", 1);map.put("banana", 2);map.put("orange", 3);// V get(Object key): 返回 key 对应的 valueInteger appleValue = map.get("apple");System.out.println("Value for 'apple': " + appleValue);// V getOrDefault(Object key, V defaultValue): 返回 key 对应的 value,key 不存在,返回默认值Integer mangoValue = map.getOrDefault("mango", 0);System.out.println("Value for 'mango': " + mangoValue);// V remove(Object key): 删除 key 对应的映射关系Integer removedValue = map.remove("banana");System.out.println("Removed value for 'banana': " + removedValue);System.out.println("Map after removing 'banana': " + map);// Set<K> keySet(): 返回所有 key 的不重复集合Set<String> keys = map.keySet();System.out.println("Keys: " + keys);// Collection<V> values(): 返回所有 value 的可重复集合Collection<Integer> values = map.values();System.out.println("Values: " + values);// Set<Map.Entry<K, V>> entrySet(): 返回所有的 key-value 映射关系Set<Map.Entry<String, Integer>> entries = map.entrySet();System.out.println("Entries: " + entries);// boolean containsKey(Object key): 判断是否包含 keyboolean containsApple = map.containsKey("apple");System.out.println("Contains key 'apple': " + containsApple);// boolean containsValue(Object value): 判断是否包含 valueboolean containsValue2 = map.containsValue(2);System.out.println("Contains value 2: " + containsValue2);}
}
这样我们就大致的了解了Java中有关Map的API了!
3.Map的常见实现类
在Java汇总,常见的Map
实现类包括HashMap
、LinkedHashMap
、TreeMap。
(1)HashMap
HashMap
是最常用的Map
实现类,基于哈希表实现。它允许使用null
键和null
值,但不保证映射的顺序。其主要特点包括:
- 线程不安全:多个线程同时访问时需要手动同步。
- 无序:不保证键值对的插入顺序。
- 高效:大多数操作的时间复杂度为O(1)。
以下为其代码演示:
import java.util.HashMap;
import java.util.Map;public class HashMapExample {public static void main(String[] args) {Map<String, Integer> hashMap = new HashMap<>();// 添加键值对hashMap.put("Apple", 10);hashMap.put("Banana", 20);hashMap.put("Orange", 30);hashMap.put("Apple", 40); // 重复键将覆盖之前的值// 获取值int value = hashMap.get("Apple");System.out.println("Value for 'Apple': " + value);// 判断是否包含键boolean containsKey = hashMap.containsKey("Banana");System.out.println("Contains key 'Banana': " + containsKey);// 判断是否包含值boolean containsValue = hashMap.containsValue(20);System.out.println("Contains value 20: " + containsValue);// 遍历键值对for (Map.Entry<String, Integer> entry : hashMap.entrySet()) {System.out.println(entry.getKey() + ": " + entry.getValue());}// 删除键值对hashMap.remove("Orange");// 清空映射hashMap.clear();// 判断是否为空boolean isEmpty = hashMap.isEmpty();System.out.println("Is empty: " + isEmpty);}
}
(2)LinkedHashMap
LinkedHashMap
继承自HashMap
,并且在内部使用双向链表维护键值对的插入顺序。因此LinkedHashMap
是有序的Map
实现类。其主要特点包括:
- 维护插入顺序或访问顺序。
- 其他特性与
HashMap
相同。
以下为其代码演示:
import java.util.LinkedHashMap;
import java.util.Map;public class LinkedHashMapExample {public static void main(String[] args) {Map<String, Integer> linkedHashMap = new LinkedHashMap<>();// 添加键值对linkedHashMap.put("Apple", 10);linkedHashMap.put("Banana", 20);linkedHashMap.put("Orange", 30);linkedHashMap.put("Apple", 40); // 重复键将覆盖之前的值// 遍历键值对for (Map.Entry<String, Integer> entry : linkedHashMap.entrySet()) {System.out.println(entry.getKey() + ": " + entry.getValue());}}
}
(3)TreeMap
TreeMap
是基于红黑树实现的有序Map
,它的键按照自然顺序或自定义比较器的顺序排序。其主要特点包括:
- 保证键的排序顺序。
- 其他特性与
HashMap
相似,但TreeMap
的操作时间复杂度为O(log n)。
以下为其代码演示:
import java.util.Map;
import java.util.TreeMap;public class TreeMapExample {public static void main(String[] args) {Map<String, Integer> treeMap = new TreeMap<>();// 添加键值对treeMap.put("Apple", 10);treeMap.put("Banana", 20);treeMap.put("Orange", 30);treeMap.put("Apple", 40); // 重复键将覆盖之前的值// 遍历键值对for (Map.Entry<String, Integer> entry : treeMap.entrySet()) {System.out.println(entry.getKey() + ": " + entry.getValue());}}
}
这样我们就大致的了解了Map中常见实现类了!
4.Map的实际案例
在学习完了Map概念简介、Map接口中常用API与Map的常见实现类之后,现在让我们看一下使用Map的实际案例来进一步加深对Java中Map类的理解:
以下示例展示了如何使用Map
统计一段文本中每个单词出现的频率:
import java.util.HashMap;
import java.util.Map;public class WordFrequency {public static void main(String[] args) {String text = "This is a sample text. This text is for demonstration purposes.";// 统计单词频率Map<String, Integer> wordCount = new HashMap<>();String[] words = text.split("\\s+");for (String word : words) {word = word.toLowerCase().replaceAll("[^a-zA-Z]", "");if (!word.isEmpty()) {wordCount.put(word, wordCount.getOrDefault(word, 0) + 1);}}// 打印结果for (Map.Entry<String, Integer> entry : wordCount.entrySet()) {System.out.println(entry.getKey() + ": " + entry.getValue());}}
}
——这样我们即完成了对一段文本中每个单词出现的次数的统计。
5.总结
Map
接口及其实现类在Java编程中扮演着重要角色。通过本文的介绍,相信读者能更好地理解Map
的概念、常用方法及其在实际应用中的使用。HashMap
提供了高效但无序的存储,LinkedHashMap
维护插入顺序,TreeMap
提供了有序存储。
选择合适的Map
实现类取决于具体需求,例如是否需要保证键的顺序或是否需要线程安全。
以上就是本篇文章的全部内容了!!!
相关文章:
Java中的Map(如果想知道Java中有关Map的知识点,那么只看这一篇就足够了!)
前言:在Java编程语言中,集合框架(Collection Framework)提供了一系列用于存储和操作数据的接口和类。其中,Map和Set是两个非常重要的接口,分别用于存储键值对和无重复元素的集合。 ✨✨✨这里是秋刀鱼不做梦…...
裸金属服务器详解
在云计算飞速发展的今天,裸金属服务器(Bare Metal Server, BMS)作为一种兼具传统物理服务器性能和虚拟化服务优势的计算资源,正逐渐成为企业和个人用户的重要选择。今天我们就来了解下关于裸金属服务器的定义、核心特点以及其在各…...
等待唤醒机制两种实现方法-阻塞队列
桌子上有面条-》吃货执行 桌子上没面条-》生产者制造执行 1、消费者等待 消费者先抢到CPU执行权,发现桌子上没有面条,于是变成等待wait状态,并释放CPU执行权,此时的CPU肯定会被厨师抢到,初始开始做面条,…...
数组项相加和 – 如何将 JavaScript 数组中的数字相加
JavaScript 中的数组是一个对象,它允许您在单个变量名称下存储多个值的有序集合,并以多种方式操作这些值。 在本文中,您将学习如何使用几种不同的方法计算给定数组中所有数字的总和。 具体来说,使用以下方法得到数组中所有数字的总…...
C#和S7-1200PLC S7.NET通信
1、一步步建立一个C#项目 一步步建立一个C#项目(连续读取S7-1200PLC数据)_s7协议批量读取-CSDN博客文章浏览阅读1.7k次,点赞2次,收藏4次。这篇博客作为C#的基础系列,和大家分享如何一步步建立一个C#项目完成对S7-1200PLC数据的连续读取。首先创建一个窗体应用。_s7协议批量…...
常用命令git branch
Git Branch 命令总结 列出分支 git branch:显示本地分支,当前分支会被标记。git branch -r:显示远程分支。git branch -a:显示所有本地和远程分支。 创建分支 git branch <branch_name>:创建一个新分支但不自…...
Android 制作系统签名
一、切换目录 cd build/target/product/security二、执行命令 1)将使用.pk8生成platform.priv.pem (.pem即可,文件名可随意修改)openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out platform.pem -nocrypt2)生成.p12,此时需输入两次密码,并且要记住 -name后所设置…...
C语言第13篇
1.下面程序是计算n个数的平均值,请填空.______ #include<stdio.h> void main( ) { int i,n; float x,avg0.0; scanf("%d",&n); for(i0;i<n;i) { scanf("%f",&x); avgavg______; } avg________; printf("avg%f\n",avg); } A) …...
基于FPGA的数字信号处理(22)--进位保存加法器(Carry Save Adder, CSA)
目录 1、拆解多个数的加法 2、进位保存加法器 3、CSA的优点和缺点 4、CSA电路的实现 文章总目录点这里:《基于FPGA的数字信号处理》专栏的导航与说明 1、拆解多个数的加法 考虑3个4bits数相加,10 4 7 21 的过程是这样的: 其中的红色数…...
idea使用free流程,2024idea、2023idea都可以安装免费使用
1.先到官网下载,这里选择win系统的,点击下图的.exe https://www.jetbrains.com/idea/download/?sectionwindows 2.下载好后基本上就是一直点击“下一步”到直到安装好,安装好后先打开软件后关闭退出 3.下载配配套资料 链接: https://pan.ba…...
设计模式 之 —— 抽象工厂模式
目录 什么是抽象工厂模式? 定义 特点 抽象工厂模式(java代码示例) 首先定义第一个接口 实现第一个接口的类 定义第二个接口 实现第二个接口的类 * 创建抽象工厂类 创建扩展了 AbstractFactory 的工厂类 饮料工厂 食物工厂 * 创建一个…...
计量经济学(十六)--一文读懂和学会医学统计学中的四种检验方法
1. 统计学是什么? 统计学是应用数学的一个分支,主要通过利用概率论建立数学模型,收集所观察系统的数据,进行量化的分析、总结,并进而进行推断和预测,为相关决策提供依据和参考。它被广泛的应用在各门学科之上,从物理和社会科学到人文科学,甚至被用来工商业及政府的情报…...
解析 C# Dictionary 代码
entries用于存储当前每个节点的数据,其中四个字段分别表示: hashCode:key对应的hash值next:处理hash冲突,可以理解为是一个链表结构,邻接表key:存储的keyvalue:存储的value bucket…...
如何利用人工智能提升工作效率
在当今这个信息爆炸的时代,我们每天都被大量的工作任务所困扰。然而,随着人工智能技术的不断发展,我们可以通过一些智能工具来提升我们的工作效率。在这篇文章中,我将分享一些关于如何利用人工智能提升工作效率的建议。 首先&…...
Linux驱动开发—Linux内核定时器概念和使用详解,实现基于定时器的字符驱动
文章目录 内核定时器概念在Linux驱动模块中使用定时器软定时器(Soft Timers)jiffies 含义高精度定时器(High Resolution Timers) 实现倒计时字符设备驱动 内核定时器概念 在 Linux 内核中,定时器是用来管理和调度延迟…...
mysql数据库:数据库,表和列的基本概念
mysql:数据库,表和列的基本概念以及导入和导出文件 数据库的概念和用途 数据库是一个有组织的数据集合,它们被存储在计算机上以便于管理和访问。数据库的主要目的是为了存储和管理数据,同时使数据能够被高效地访问、检索和更新。数…...
Nextjs 使用 graphql,并且接入多个节点
写在前面 随着区块链技术的流行,也促进了 subgraph 工具的兴起。那么如何在前端接入 graphql 节点就成了关键,其接入方式既存在与 restful 接口相类似的方式,也有其独特接入风格。本文将介绍如何接入 graphql 以及如何应对多个 graphql 节点…...
小结——知识注入
所谓知识注入,其实不该脱离于LLM的基础工作原理,然后空谈抽象概念。 知识,也就是你问他问题,他能输出正确的回答,这只是一个简单的输出token的过程。输出得准了,就是知识,输出不准了,…...
科普文:微服务之Spring Cloud Alibaba组件Nacos一致性协议Distro+Raft概叙
一、概要 Nacos是阿里开放的一款中间件,它主要提供三种功能:持久化节点注册,非持久化节点注册和配置管理。 二、一致性协议 - AP/CP Nacos不是纯粹的AP服务,也不是纯粹的CP服务,而是两者同时支持。 这要从服务注册…...
python合并音视频-通过ffmpeg合并音视频
🌈所属专栏:【python】✨作者主页: Mr.Zwq✔️个人简介:一个正在努力学技术的Python领域创作者,擅长爬虫,逆向,全栈方向,专注基础和实战分享,欢迎咨询! 您的…...
Yolov8添加ConvNetV1和V2模块
Yolov8添加ConvNet模块 1 ConvNet系列相关内容 (1)2022 论文地址:A ConvNet for the 2020s Code Link 如下图所示,精度、效率、尺寸都很不错。 论文的摘要如下: 视觉识别的“咆哮的 20 年代”始于视觉注意力 &…...
十个常见的 Python 脚本 (详细介绍 + 代码举例)
1. 批量重命名文件 介绍: 该脚本用于批量重命名指定目录下的文件,例如将所有 ".txt" 文件重命名为 ".md" 文件。 import osdef batch_rename(directory, old_ext, new_ext):"""批量重命名文件扩展名。Args:directory: 要处理…...
【C语言】详解feof函数和ferror函数
文章目录 前言1. feof1.1 feof函数原型1.2 正确利用函数特性读写文件1.2.1 针对文本文件1.2.2 针对二进制文件 1.3 feof函数的原理1.4 feof函数实例演示 2. ferror2.1 ferror函数原型 前言 或许我们曾在网络上看过有关于feof函数,都说这个函数是检查文件是否已经读…...
ValueListenableBuilder 和 addListener 在 ChangeNotifier的区别
1、前言 ValueListenableBuilder 和 addListener 在 ChangeNotifier 中有不同的用途和用法,适用于不同的场景。它们的主要区别在于它们如何监听和响应状态变化,以及它们的用法和特性。 2、ValueListenableBuilder用法 ValueListenableBuilder 是一个 …...
ScriptEcho:AI赋能的前端代码生成神器
ScriptEcho:AI赋能的前端代码生成神器 在前端开发中,如果你总是觉得写代码太费时费力,那么 ScriptEcho 将成为你的救星。这个 AI 代码生成平台不仅能帮你省下大量时间,还能让你轻松愉快地写出生产级代码。本文将带你了解 ScriptEc…...
TypeError: ‘float’ object is not iterable 深度解析
TypeError: ‘float’ object is not iterable 深度解析与实战指南 在Python编程中,TypeError: float object is not iterable是一个常见的错误,通常发生在尝试对浮点数(float)进行迭代操作时。这个错误表明代码中存在类型使用不…...
灵茶八题 - 子序列 +w+
灵茶八题 - 子序列 w 题目描述 给你一个长为 n n n 的数组 a a a,输出它的所有非空子序列的元素和的元素和。 例如 a [ 1 , 2 , 3 ] a[1,2,3] a[1,2,3] 有七个非空子序列 [ 1 ] , [ 2 ] , [ 3 ] , [ 1 , 2 ] , [ 1 , 3 ] , [ 2 , 3 ] , [ 1 , 2 , 3 ] [1],[…...
为什么美元债务会越来越多?
美元债务规模持续膨胀,其背后原因复杂多样,可归结为以下几个主要因素: 财政赤字和刺激政策是导致美元债务增加的重要原因。美国政府长期面临财政赤字问题,支出远超收入,为弥补这一缺口,政府不得不大量发行…...
二维凸包算法 Julia实现
问题描述:给定平面上 n n n 个点的集合 Q Q Q,求其子集 P P P 构成 Q Q Q 的凸包,即 ∀ p ∈ Q , ∃ p 0 , p 1 , p 2 ∈ P \forall p \in Q, \exist p_0, p_1, p_2 \in P ∀p∈Q,∃p0,p1,p2∈P 使得点 p p p 在以点 p 0 , p 1 …...
python dash框架
Dash 是一个用于创建数据分析型 web 应用的 Python 框架。它由 Plotly 团队开发,并且可以用来构建交互式的 web 应用程序,这些应用能够包含图表、表格、地图等多种数据可视化组件。 Dash 的特点: 易于使用:Dash 使用 Python 语法…...
地产公司做网站维护写代码么/建个人网站的详细步骤
返回:贺老师课程教学链接阅读下面的程序,学会使用数组。若感觉太小儿科的题目,可以直接跳过。不过,要是阅读困难,还是要老老实实地对照运行结果,以及借助单步调试的工具,搞清求值并显示的过程。…...
手机壳在线设计网站/宁波网络推广seo软件
这两天再看K近邻法,K近邻法是基本的分类与回归算法.在这里总结一下,从一下几个方面. 1KNN的原理 2距离度量 3 K值的选取 4 分类规则以…...
做视频网站需要什么样的配置/网站百度收录查询
Java 数组 Java 语言中提供的数组是用来存储固定大小的同类型元素的。 声明数组变量 欲使用数组,首先必须声明数组变量,用来存放数组对象。 dataType[] arrayRefVar; // 首选的方法 /* 或 */ dataType arrayRefVar[]; // 效果相同,但不…...
wordpress团购模板/爱站工具包手机版
尝试安装NPM时收到此错误。对此错误的任何帮助都非常感激。$ curl http://npmjs.org/install.sh | sh% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed100 85 0 85 0 0 2226 0 --:--:-- --:--:-- --:--:-- 4473sh: line 1…...
网站建设方案书安全性/怎么在百度上推广
今天看到一篇文章使用的方法名称是地理探测器,介绍说比常用的回归方法要有优势,查询了一下方法也容易理解,而且确有其优势,关键是作者专门做了一个page介绍他的软件和方法,中英文的介绍文章也都有,真是十分…...
方便做流程图的网站/百度推广助手电脑版
//这个模块里面封装了所有对数据库的常用操作var MongoClient require(mongodb).MongoClient;var config require("../config.js");//不管数据库什么操作,都是先连接数据库,所以我们可以把连接数据库//封装成为内部函数function _connectDB(…...