集合-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.mzph.cn/news/94907.shtml

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

相关文章

阿里云关系型数据库RDS详细说明

阿里云RDS关系型数据库大全&#xff0c;关系型数据库包括MySQL版、PolarDB、PostgreSQL、SQL Server和MariaDB等&#xff0c;NoSQL数据库如Redis、Tair、Lindorm和MongoDB&#xff0c;阿里云百科分享阿里云RDS关系型数据库大全&#xff1a; 目录 阿里云RDS关系型数据库大全 …

sqlite3的lib和头文件在哪下载 2023/9/19 上午10:46:43

2023/9/19 上午10:46:43 sqlite3的lib和头文件在哪下载 2023/9/19 上午10:46:54 你可以从SQLite官方网站下载SQLite的lib和头文件。请按照以下步骤进行操作: 打开SQLite官方网站:https://www.sqlite.org/index.html 在页面上方的菜单中选择 “Download”(下载)。 在下载…

人工智能:定义未来,揭开历史神秘面纱,展望无限可能!

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是尘缘&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f449;点击这里&#xff0c;就可以查看我的主页啦&#xff01;&#x1f447;&#x…

4、Linux内核的分析

一、内核分析 1、内核的概念 作为计算机而言&#xff0c;软件和硬件之间是相互依赖的&#xff0c;硬件如果脱离了软件&#xff0c;则无法正常工作&#xff0c;软件脱离了硬件则无法正常运行。这个软件一般指的是操作系统的内核&#xff0c;作为Linux而言&#xff0c;内核也被…

爬虫项目实战——爬取B站视频

目标&#xff1a;对B站视频详情页url进行视频的爬取。 注&#xff1a;由于B站的音频和视频的链接是分开的&#xff0c;所以在提取是需要分别提取&#xff0c;然后进行合成。 这里只管提取&#xff0c;合成的工作以后再说。 具体步骤 发送请求 对于视频详情页url地址发送请求 …

Unity中Shader的前向渲染路径ForwardRenderingPath

文章目录 前言一、前向渲染路径的特点二、渲染方式1、逐像素(效果最好)2、逐顶点(效果次之)3、SH球谐(效果最差) 三、Unity中对灯光设置 后&#xff0c;自动选择对应的渲染方式1、ForwardBase仅用于一个逐像素的平行灯&#xff0c;以及所有的逐顶点与SH2、ForwardAdd用于其他所…

浏览器从输入URL到展示的流程

文章目录 1. URL输入2. DNS解析3. 建立TCP连接4. 发送http或者https请求5. 服务器端响应请求6. 浏览器解析渲染页面7. 断开TCP连接 1. URL输入 输入URL后&#xff0c;浏览器会对URL进行以下的判断 是否合法如果合法&#xff0c;则判断URL是否完整&#xff0c;如果不完整&…

2023 css新特性简单总结

2023 css新特性简单总结 CSS 是一种用于设计网页和用户界面样式的强大语言。它在不断发展&#xff0c;不断添加新特性。2023 年&#xff0c;将有许多令人激动新的 CSS 新特性。 容器查询 最重要的新功能之一是容器查询。容器查询允许我们根据父容器的大小设置元素的样式。这…

Qt model/view 理解 2

这是我对 Qt 的 model/view 内容理解的第二篇 blog&#xff0c;在第一篇文章中&#xff0c;介绍 QTableView 和 QAbstractTableModel&#xff0c;实现显示了对数据源的显示&#xff0c;但是显示的格式和修改的模式都是按照 View 控件的自显示方式。在此&#xff0c;使用 Qt 自带…

重生奇迹MU刷装备注意事项

在打斗游戏里面装备的作用非常巨大&#xff0c;较好的武器装备可以为玩家带来不错的体验&#xff0c;很多玩家甚至不惜花重金打造属于好装备。那么游戏中刷装备需要注意什么。 一、对武器装备的认识 对于玩家来说需要对武器装备有一定的认识&#xff0c;连基本的武器装备分类都…

vue3项目中mitt的使用

Vue2.x使用EventBus进行组件通信&#xff0c;而Vue3.x推荐使用mitt.js。比起Vue实例上的EventBus&#xff0c;mitt.js好在哪里呢&#xff1f;首先它足够小&#xff0c;仅有200bytes&#xff0c;其次支持全部事件的监听和批量移除&#xff0c;它还不依赖Vue实例&#xff0c;所以…

【面试总结大纲】

面试 1. springSpring AOP的具体实现核心概念分别指的是什么?基于注解的切面实现主要包括以下几个步骤&#xff1a;两个切面&#xff0c;它们之间的顺序是怎么控制的 springmvc的工作流程设计模式原则Spring 框架中用到了哪些设计模式&#xff1f; 2. Java-锁2.1锁的分类可重入…

asp.net coremvc+efcore增删改查

下面是一个使用 EF Core 在 ASP.NET Core MVC 中完成增删改查的示例&#xff1a; 创建一个新的 ASP.NET Core MVC 项目。 安装 EF Core 相关的 NuGet 包。在项目文件 (.csproj) 中添加以下依赖项&#xff1a; <ItemGroup><PackageReference Include"Microsoft…

LCR 101.分割等和子集

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;LCR 101. 分割等和子集 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 将数组分为等和的两部分等价于数组是否中存在部分元素和为数组总和的一半。 首先&#xff0c;若数组长度为 1 或数组…

LVGL_基础控件Button

LVGL_基础控件Button 1、创建按键 /* 创建一个btn部件(对象) */lv_obj_t * btn lv_btn_create(lv_scr_act()); // 创建一个btn部件(对象),他的父对象是活动屏幕对象2、修改样式 // 修改按钮部件&#xff08;对象&#xff09;矩形背景部分的样式&#xff08;按下的时候背…

C/C++进程超详细详解【下部分】(系统性学习day8)

目录 前言 一&#xff0c;有名管道通信 1 .概念 2 .创建有名管道 实例代码如下&#xff1a; 二、信号通信 1 .概念 2 .用户进程对信号的响应方式 3. 用户进程对常用信号的缺省操作 4. 信号处理流程 5. 信号相关函数(系统调用) 5.1 kill - 给指定进程发送信号 实例代…

gdb的使用

目录 gdb工具的使用 代码调试相关指令 运行程序指令 r 显示代码的指令 l 给代码打断点 b 查看断点位置 info b 执行代码到断点处停止 关闭断点 d断点编号 关闭某个断点&#xff0c;但不删除 disable编号 打开某个断点 enable断点编号 逐过程调试代码 n 逐语句调试代码 s 查看…

复习Day09:哈希表part02:141.环形链表、142. 环形链表II、454.四数相加II、383赎金信

之前的blog&#xff1a;https://blog.csdn.net/weixin_43303286/article/details/131765317 我用的方法是在leetcode再过一遍例题&#xff0c;明显会的就复制粘贴&#xff0c;之前没写出来就重写&#xff0c;然后从拓展题目中找题目来写。辅以Labuladong的文章看。然后刷题不用…

go-fastdfs分布式文件存储集群搭建和测试

一、官方文件 https://sjqzhang.github.io/go-fastdfs/#character2、集群原理 小集群原理&#xff1a; 大集群原理 二、服务端集群部署 1、在集群每个节点机器上下载安装包 (建议使用最新稳定版本&#xff09; wget --no-check-certificate https://github.com/sjqzhang/go…

CSS 创建

当读到一个样式表时&#xff0c;浏览器会根据它来格式化 HTML 文档。 如何插入样式表 插入样式表的方法有三种: 外部样式表(External style sheet)内部样式表(Internal style sheet)内联样式(Inline style) 外部样式表 当样式需要应用于很多页面时&#xff0c;外部样式表将是…