集合-Map系列

系列文章目录

1.集合-Collection-CSDN博客​​​​​​

2.集合-List集合-CSDN博客

3.集合-ArrayList源码分析(面试)_喜欢吃animal milk的博客-CSDN博客

4.数据结构-哈希表_喜欢吃animal milk的博客-CSDN博客

5.集合-set系列集合-CSDN博客

6.集合-Map系列-CSDN博客


文章目录

目录

系列文章目录

文章目录

前言

一 . 什么是Map?

 二 . HashMap

三 . LikedHashMap

 三 . TreeMap

总结


前言

大家好,今天给大家带来的是Map系列的集合,包括HashMap,TreeMap,LikedHashMap相关的内容。


一 . 什么是Map?

Map是一个接口类,该类没有继承自Collection,该类中存储的是结构的键值对,并且K一定是唯一的,不能重复。

在Map中,每个键都是唯一的,而每个键对应一个值。通过键可以快速地查找和获取对应的值。Map提供了一系列的方法来操作键值对,例如put()方法用于插入键值对,get()方法用于获取指定键对应的值,remove()方法用于删除指定键的键值对等。

Map继承体系

Map接口有多个实现类,常用的有HashMap、LinkedHashMap和TreeMap。它们都实现了Map接口,并提供了不同的特性和性能。

  • HashMap是最常用的Map实现类,它使用哈希表(Hash Table)作为底层数据结构来存储键值对。它的插入、删除和查找操作的平均时间复杂度是O(1),具有较高的性能。
  • LinkedHashMap是基于HashMap的实现类,它在HashMap的基础上保持了插入顺序或者访问顺序。它通过双向链表来维护键值对的顺序,可以按照插入顺序或者访问顺序进行遍历。
  • TreeMap是基于红黑树(Red-Black Tree)的实现类,它根据键的自然顺序或者自定义的排序规则来对键值对进行排序。它的插入、删除和查找操作的时间复杂度是O(logN),具有较好的性能。

Map的特点:

  1. 键的唯一性:Map中的每个键都是唯一的,不允许重复的键存在。如果插入了相同的键,则后面的值会覆盖前面的值。

  2. 键值对的存储:Map以键值对的形式存储数据,每个键对应一个值。通过键可以快速地查找和获取对应的值。

  3. 无序性:Map中的键值对是无序的,即插入顺序和存储顺序不一致。如果需要有序的键值对,可以使用LinkedHashMap或TreeMap。

  4. 可以包含null键和null值:Map中可以包含null键和null值。但需要注意的是,HashMap和LinkedHashMap允许有一个null键和多个null值,而TreeMap不允许有null键,但可以有多个null值。

  5. 动态调整大小:Map的实现类会根据需要自动调整内部的存储容量。当键值对的数量超过了一定阈值时,会自动扩容,以保证插入和查找操作的性能。

  6. 高效的查找操作:通过键可以快速地查找对应的值,时间复杂度为O(1)或O(logN)。不同的Map实现类具有不同的查找性能,HashMap具有较高的查找性能。

Map常用方法:

  1. V put(K key, V value):将指定的键值对添加到Map中(键没有添加,有覆盖),并返回之前与该键关联的值(如果存在)。如果之前没有与该键关联的值,则返回null。

  2. V remove(Object key):从Map中删除指定键的映射关系,并返回之前与该键关联的值。如果Map中没有与该键关联的值,则返回null。

  3. boolean containsKey(Object key):判断Map中是否包含指定的键,如果包含则返回true,否则返回false。

  4. boolean containsValue(Object value):判断Map中是否包含指定的值,如果包含则返回true,否则返回false。

  5. int size():返回Map中键值对的数量。

  6. Set<K> keySet():返回包含Map中所有键的Set集合。

  7. Collection<V> values():返回包含Map中所有值的Collection集合。

  8. Set<Map.Entry<K, V>> entrySet():返回包含Map中所有键值对的Set集合。

总的来说,Map是一种存储键值对的数据结构,提供了快速的键查找和值访问的能力。不同的Map实现类具有不同的特性和性能,可以根据具体的需求选择适合的实现类。


 二 . HashMap

HashMap是Java中常用的Map实现类之一,它基于哈希表的数据结构来存储键值对。以下是HashMap的特点:

  1. 不重复:HashMap中的每个键都是唯一的,不允许重复的键存在。如果插入了相同的键,则后面的值会覆盖前面的值。

  2. 无序性:HashMap中的键值对是无序的,即插入顺序和存储顺序不一致。如果需要有序的键值对,可以使用LinkedHashMap或TreeMap。

  3. 无索引: hashMap底层是通过哈希表来实现,没有索引结构

entry对象: 键+值 组成的对象

底层会根据待存入元素的键来计算哈希值,找到应存入的位置,如果该位置已经有元素了,则会遍历整个链表(红黑树)调用equals方法比较键的属性值,如果有重复的键则会将该元素覆盖,反之则添加

在jdk8之前老元素会挂在新元素的下面,形成链表

jdk8开始

三 . LikedHashMap

LinkedHashMap是HashMap的一个子类,它在内部使用双向链表来维护键值对的插入顺序。与HashMap不同的是,遍历LinkedHashMap时,键值对的顺序与插入顺序一致。

LinkedHashMap具有以下特点:

  1. 有序性:LinkedHashMap会按照键值对的插入顺序来维护键值对的顺序。即,遍历LinkedHashMap时,键值对的顺序与插入顺序一致。

  2. 不重复:HashMap中的每个键都是唯一的,不允许重复的键存在。如果插入了相同的键,则后面的值会覆盖前面的值。

  3. 无索引

 三 . TreeMap

TreeMap是Java中的一个Map实现类,它基于红黑树(Red-Black Tree)数据结构实现。与HashMap和LinkedHashMap不同,TreeMap是有序的,它根据键的自然顺序或者自定义的比较器来维护键值对的顺序。

TreeMap具有以下特点:

  1. 有序性:TreeMap会根据键的自然顺序或者自定义的比较器来维护键值对的顺序。即,遍历TreeMap时,键值对的顺序是有序的。

  2. 不重复:HashMap中的每个键都是唯一的,不允许重复的键存在。如果插入了相同的键,则后面的值会覆盖前面的值。

  3. 无索引

  4. 可排序

TreeMap提供了HashMap中的常用方法,同时还提供了一些额外的方法来支持有序性,如:

  1. TreeMap():构造一个新的空树映射,它根据键的自然顺序进行排序。

  2. TreeMap(Comparator<? super K> comparator):构造一个新的空树映射,它根据指定的比较器进行排序。


总结

这篇博客给大家讲解了Map系列集合的用法和特性以及底层的机制,大家好好理解,我们下一篇博客见。

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

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

相关文章

MySQL之DQL

DQL是数据查询语言 SELECT语句 语法&#xff1a; SELECT {*,列名&#xff0c;函数等} FROM 表名;SELECT *&#xff1a;表示匹配所有列 FROM :提供数据源 例如:查询student表的所有记录 SELECT * FROM student;例如&#xff1a;查询学生姓名和地址&#xff1a; SELECT Stud…

Linux安装宝塔,并实现公网远程登录宝塔面板【内网穿透】

目录 前言 1. 安装宝塔 2. 安装cpolar内网穿透 3. 远程访问宝塔 4. 固定http地址 5. 配置二级子域名 6. 测试访问二级子域名 前言 宝塔面板作为建站运维工具&#xff0c;它支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能&#xff0c;可提高…

SpringBoot结合Redisson实现分布式锁

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Sp…

【已解决】opencv 交叉编译 ffmpeg选项始终为NO

一、opencv 交叉编译没有 ffmpeg &#xff0c;会导致视频打不开 在交叉编译时候&#xff0c;发现在 pc 端能用 opencv 打开的视频&#xff0c;但是在 rv1126 上打不开。在网上查了很久&#xff0c;原因可能是 交叉编译过程 ffmpeg 造成的。之前 ffmpeg 是直接用 apt 安装的&am…

css自学框架之选项卡

这一节我们学习切换选项卡&#xff0c;两种切换方式&#xff0c;一种是单击切换选项&#xff0c;一种是鼠标滑动切换&#xff0c;通过参数来控制&#xff0c;切换方法。 一、参数 属性默认值描述tabBar.myth-tab-header span鼠标触发区域tabCon.myth-tab-content主体区域cla…

FFmpeg 命令:从入门到精通 | FFmpeg 基本介绍

FFmpeg 命令&#xff1a;从入门到精通 | FFmpeg 基本介绍 FFmpeg 命令&#xff1a;从入门到精通 | FFmpeg 基本介绍FFmpeg 简介FFmpeg 基础知识复用与解复用编解码器码率和帧率 资料 FFmpeg 命令&#xff1a;从入门到精通 | FFmpeg 基本介绍 本系列文章要解决的问题&#xff1…

掌动智能:UI自动化测试工具的重要性和应用

在软件开发过程中&#xff0c;测试是至关重要的环节。而UI自动化测试工具则成为了测试团队提高效率、降低成本、保证软件质量的重要利器。本文将介绍UI自动化测试工具的概念和重要性&#xff0c;并探讨其在软件开发中的应用和好处。 一、UI自动化测试工具的概念 UI自动化测试工…

ASUS华硕飞行堡垒5笔记本FX504GM_FX80GM原装出厂Windows10系统

系统自带所有驱动、出厂主题壁纸、系统属性华硕专属LOGO标志、Office办公软件、MyASUS华硕电脑管家等预装程序 下载链接&#xff1a;https://pan.baidu.com/s/1C8vPvqiwqoUY3PxC915LXg?pwdv079

18.示例程序(编码器接口测速)

STM32标准库开发-各章节笔记-查阅传送门_Archie_IT的博客-CSDN博客https://blog.csdn.net/m0_61712829/article/details/132434192?spm1001.2014.3001.5501 main.c #include "stm32f10x.h" // Device header #include "Delay.h" #incl…

如何在 Elasticsearch 中使用 Openai Embedding 进行语义搜索

随着强大的 GPT 模型的出现&#xff0c;文本的语义提取得到了改进。 在本文中&#xff0c;我们将使用嵌入向量在文档中进行搜索&#xff0c;而不是使用关键字进行老式搜索。 什么是嵌入 - embedding&#xff1f; 在深度学习术语中&#xff0c;嵌入是文本或图像等内容的数字表示…

智能合约漏洞,BEVO 代币损失 4.5 万美元攻击事件分析

智能合约漏洞&#xff0c;BEVO 代币损失 4.5 万美元攻击事件分析 一、事件背景 北京时间 2023 年 1 月 31 日&#xff0c;在 twitter 上看到这样一条消息&#xff1a; BEVO 代币被攻击&#xff0c;总共损失 45000 美元&#xff0c;导致 BEVO 代币的价格下跌了 99%。 有趣的是…

2023年山东省安全员C证证考试题库及山东省安全员C证试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年山东省安全员C证证考试题库及山东省安全员C证试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大…

JAVA 学习笔记 2年经验

文章目录 基础String、StringBuffer、StringBuilder的区别jvm堆和栈的区别垃圾回收标记阶段清除阶段 异常类型双亲委派机制hashmap和hashtable concurrentHashMap 1.7和1.8的区别java的数据结构排序算法&#xff0c;查找算法堆排序 ThreadLocal单例模式常量池synchronizedsynch…

JavaScript系列从入门到精通系列第十四篇:JavaScript中函数的简介以及函数的声明方式以及函数的调用

文章目录 一&#xff1a;函数的简介 1&#xff1a;概念和简介 2&#xff1a;创建一个函数对象 3&#xff1a;调用函数对象 4&#xff1a;函数对象的普通功能 5&#xff1a;使用函数声明来创建一个函数对象 6&#xff1a;使用函数声明创建一个匿名函数 一&#xff1a;函…

tiny模式基本原理整合

【Tiny模式】的基本构成 M【首头在首位】 U【/】 V【HTTP/】 Host H【真实ip】 XH \r回车 \n换行 \t制表 \ 空格 一个基本的模式构成 [method] [uri] [version]\r\nHost: [host]\r\n[method] [uri] [version]\r\nHost: [host]\r\n 检测顺序 http M H XH 有些地区 XH H M 我这边…

MySQL - mysql服务基本操作以及基本SQL语句与函数

文章目录 操作mysql客户端与 mysql 服务之间的小九九了解 mysql 基本 SQL 语句语法书写规范SQL分类DDL库表查增 mysql数据类型数值类型字符类型日期类型 示例修改&#xff08;表操作&#xff09; DML添加数据删除数据修改数据 DQL查询多个字段条件查询聚合函数分组查询排序查询…

python模拟表格任意输入位置

在表格里输入数值&#xff0c;要任意位置&#xff0c;我找到了好方法&#xff1a; input输入 1. 行 2. 列输入&#xff1a;1 excel每行输入文字input输入位置 3.2 表示输入位置在&#xff1a;3行个列是要实现一个类似于 Excel 表格的输入功能&#xff0c;并且希望能够指定输入…

oracle GBK未定义编码使用Unicode写入特殊字符e000迁移lightdb-x测试

E:\HS\LightDBSVN\23.3sql文件\迁移工具\caofa\config\application.properties gbk-->uft8: logging.configclasspath:log4j2.xml # ???? etl.global.sourceDatabaseoracle etl.global.targetDatabaselightdb etl.global.showSqlfalse etl.global.fastFailfalse etl.g…

数据结构之双链表

双链表 1.复杂方法的图分析2.My_LinkedList代码3.接口MY_lIST4.测试类 1.复杂方法的图分析 2.My_LinkedList代码 package My_liNKEDlIST;public class My_LinkedList implements MY_lIST{static class ListNode{public int val;public ListNode prev;public ListNode next;pub…

git 分支管理进阶

目录 1. merge 命令&#xff1a;git merge A 2. rebase 命令&#xff1a;git rebase A 命令&#xff1a;git rebase B A 3. 指针——分支切换 3.1哈希值方式 3.2相对引用 3.3综合练习 4.撤销 4.1 本地分支 reset 4.2 远程分支 revert 5.Cherry-pick与交互式的 …