16.Map系列、集合嵌套、不可变集合

news2024/9/25 1:17:46

目录

一.Map

1.1 Map集合概述

1.2 Map集合体系

1.3 Map集合体系特点

1.4 Map集合实现类特点

1.5 Map集合的API

1.6 Map集合的遍历方式

1.6.1 键找值的方式遍历

1.6.2 键值对的方式遍历

1.6.3 Lambda表达式的方式

1.7 HashMap

1.7.1 HashMap的特点

1.7.2 底层原理

1.7.3 注意事项

1.8 LinkedHashMap

1.8.1 特点

1.8.2 原理

1.8.3 注意事项

1.9 TreeMap

1.9.1 特点

1.9.2 排序规则

1.9.3 底层原理

1.9.4 注意事项

二.集合的嵌套

三.不可变集合

3.1 什么是不可变集合

3.2 不可变集合的作用

3.3 如何创建不可变集合


一.Map

1.1 Map集合概述

Map集合是一种双列集合,每个元素包含二个数据。

非常适合购物车这类业务场景。

1.2 Map集合体系

1.3 Map集合体系特点

1. Map集合的特点都是由键决定的

2. Map集合的键是无序、不重复、无索引的、值不作要求。

3. Map集合后面重复的键对应的值会覆盖前面重复键的值。

4. Map集合的键值对都可以为null。

1.4 Map集合实现类特点

1.HashMap:元素是按照键无序、不重复、无索引,值不做要求。

2.LinKedHashMap:元素是按照键有序、不重复、无索引,值不做要求。

3.TreeMap:元素是按照键排序、不重复、无索引,值不做要求。

1.5 Map集合的API

Map集合是双列集合的祖宗接口,它的功能是全部双列集合都可以继承使用的。

1.6 Map集合的遍历方式

1.6.1 键找值的方式遍历

1. 先获取Map集合的全部键的Set集合

2. 遍历键的Set集合,然后通过键提取对应值。

键找值涉及到的API:

1.6.2 键值对的方式遍历

1. 先把Map集合转换成Set集合,Set集合中的每个元素都是键值对实体类型了。

2. 遍历Set集合,然后提取键以及提取值。

键值对遍历涉及到的API

1.6.3 Lambda表达式的方式

得益于JDK8开始的新技术Lambda表达式,提供了一种更简单更直接的遍历方式。

Lambda表达式遍历涉及到的API

1.7 HashMap

1.7.1 HashMap的特点

无序、不重复、无索引。

1.7.2 底层原理

HashMap的底层原理和HashSet是一样的,都是哈希表,所以元素的增删改查性能都很好。

1.7.3 注意事项

1. Set系列集合的底层就是Map实现的,只是Set集合中的元素只要键数据,不要值数据而已。

2. 依赖equals和hashcode方法保证键的唯一。

3. 如果键要存储的是自定义对象,需要在对象中重写equals和hashcode方法。

1.8 LinkedHashMap

1.8.1 特点

有序、不可重复、无索引。

1.8.2 原理

同LinkedHashSet一样,底层数据结构依然是哈希表,只是每个键值对元素又多了一个双链表的机制记录存储的顺序。元素的增删改查性能也很好。

1.8.3 注意事项

同HashMap

1.9 TreeMap

1.9.1 特点

排序,不可重复,无索引

1.9.2 排序规则

具有值特性的数据默认按照键升序排序。

自定义类型的对象有二种方式排序:

1. 类实现Comparable接口,重写比较规则。

2. 集合自定义Comparator比较器对象,重写比较规则。

1.9.3 底层原理

同HashSet一样,底层是红黑树,所以元素的增删改查性能很好。

1.9.4 注意事项

TreeMap集合是一定要排序的,可以默认排序,也可以将键按照指定的规则进行排序

二.集合的嵌套

就是集合中的元素也是集合。

三.不可变集合

3.1 什么是不可变集合

不可变集合就是不可被修改的集合,集合的元素在创建的时候提供,并且在整个生命周期中不可改变,否则报错。

3.2 不可变集合的作用

1. 如果某个数据不可被修改,把他防御性的拷贝到集合中是个很好的实践。

2. 当集合对象被不可信的库调用时,不可变形式是安全的。

3.3 如何创建不可变集合

在List、Set、Map接口中都存在of方法,可以创建一个不可变的集合,这个集合不能增删改。

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

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

相关文章

python求不同分辨率图像的峰值信噪比,一文搞懂

可以使用 Python 的 NumPy 和 OpenCV 库来实现这个任务。提前准备一张图片作为素材。 文章目录什么是峰值信噪比PSNR 峰值信噪比补充说明使用 OpenCV 库来实现这个任务PSNR 的计算值受图像的亮度影响计算不同分辨率图像的 PSNRpython 求不同分辨率图像的峰值信噪比 | 其他知识点…

Java面试题:finalize的原理和工作缺点是什么

finalize是 Object 中的一个方法,如果子类重写它,垃圾回收时此方法会被调用,可以在其中进行资源释放和清理工作。其次将资源释放和清理放在 finalize 方法中非常不好,非常影响性能,严重时甚至会引起 OOM,从…

LabVIEW对NI Linux RT应用程序性能进行基准测试

LabVIEW对NI Linux RT应用程序性能进行基准测试如果应用程序具有苛刻的性能要求,则应为应用程序创建性能基准测试,以确保它满足性能要求。性能要求高度依赖于应用程序,应确定哪些性能指标很重要。下面介绍了典型的实时应用程序性能指标。如果…

USBIP

USBIP USB/IP 是一个开源项目,已合入 Kernel,在 Linux 环境下可以通过使用 USB/IP 远程共享 USB 设备。 USB Client:使用USB的终端,将server共享的usb设备挂载到本地。 USB Server:分享本地的usb设备至远程。 USBIP…

Python的入门知识汇集

创建 Python的创始人为Guido van Rossum。1989年圣诞节期间,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承。之所以选中Python(大蟒蛇的意思)作为程序的名字,是因为他是一个叫Monty Python的喜剧团体的爱好者。 什么是Pyhton Pytho…

委派模式——从SLF4J说起

作者:vivo 互联网服务器团队- Xiong yangxin 将某个通用解决方案包装成成熟的工具包,是每一个技术建设工作者必须思考且必须解决的问题。本文从业内流行的既有工具包入手,解析实现思路,沉淀一般方法。为技术建设的初学者提供一些实…

Gorm连接以及CURD实战+测试

Gorm CRUD 前言 Gorm是go的一个ORM框架,官方文档地址为-> GORM 指南 本文将介绍与gorm有关的CRUD操作,操作数据库类型为mysql数据库 数据库连接 func Open(dialector Dialector, opts …Option) (db *DB, err error) 该函数用于进行gorm连接对应…

中国市场手机出货量跌穿3亿部,苹果也顶不住了,只有三星暗爽

多家市调机构都给出了2022年中国智能手机市场的数据,数据虽然有些出入,不过都认为中国市场的手机出货量跌穿了3亿部,创下近10年来的新低纪录,国产手机尤其惨,而曾逆势增长的苹果也开始出现下滑。市调机构IDC给出的数据…

词法分析器Flex学习1 - Flex识别关键字

以前曾写过2篇Flex和Bison入门应用的文章; https://blog.csdn.net/bcbobo21cn/article/details/112343850 https://blog.csdn.net/bcbobo21cn/article/details/106193648 我只记得Flex是词法分析器,Bison是语法分析器; 只是一些入门的介绍&…

基于SSM+Layui的图书管理系统(Java版 附源代码及数据库)

目录 功能要求 技术栈 项目架构 登录界面 系统首页 借阅管理 图书管理 读者管理 类型管理 公告管理 管理员管理 统计分析 数据库设计 源代码数据库资料 毕设项目专栏 功能要求 (1)对系统登陆后进行增删改查功能 (2)…

文档管理对人力资源部门的重要影响

文档管理对人力资源部门的重要影响 当人力资源的管理功能是基于纸张或依赖于 Excel 电子表格、共享驱动器和其他无法与其他系统共享数据的软件等技术时,人力资源管理既耗时又耗费劳动力。用数字工作流程取代纸质流程可以简化从招聘和入职到绩效评估的流程。 随着组…

Elasticsearch(七)--ES文档的操作(下)---删除文档

一、前言 上篇文章我们了解了ES的修改文档的操作,也同样分别通过ES的kibana客户端以及Java高级Rest客户端进行学习,那么本篇末尾要给大家介绍的是对文档的删除操作,同新修改文档,也有删除单条文档和批量删除文档操作,…

工赋开发者社区 | 工业5.0为何是下一个10年的制造业关键性变革方向?

近年来,全球经济发展面临下行压力,世界各国重新认识到制造业在拉动经济增长、创造就业机会等方面的作用。欧洲在这种压力下提出了全新的工业5.0发展概念,试图重振制造业并再次引领全球工业发展潮流。本文小编分享一篇来自KNOWHOW的文章&#…

【地铁上的Redis与C#】数据类型(八)--set类型基本操作

这篇文章,我们开始学习set类型,学习set类型前我们先来看一下List类型有什么缺点。 List的缺点 当需要存储大量数据并且要提供高效率的查询时,List是无法完全实现的,这是因为list的存储结构是链表的形式,链表读取数据…

Leetcode力扣秋招刷题路-0114

从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 114. 二叉树展开为链表(Mid) 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中…

Linux- 系统随你玩之--文本、字符串处理摸金校尉--RE

文章目录1、前言2、正则表达式2.1、 概述2.2、 特点2.3、正则表达式-测试工具3、知识点3.1、 正则表达式定义3.2、 正则表达式的组成3.3、正则表达式语法支持情况4、速记理解技巧4.1、基础正则表达式4.2、等价4.3、常用运算符与表达式4.4、分割语法4.4.1、例型4.4.2、例型语法与…

Java高手速成 | JSP MVC模式项目案例

MVC模式的核心思想是有效地组合“视图”“模型”和“控制器”。在JSP 技术中,视图是一个或多个JSP页面,其作用主要是向控制器提交必要的数据和为模型提供数据显示;模型是一个或多个Javabean对象,用于存储数据;控制器是…

LifeCycle源码解析

简介 Lifecycle是Jetpack中的一个生命周期组件,可用来感知其他组件(如Activity,Fragment)生命周期的变化,从而可以保证我们的一些代码操作控制在合理的生命周期内; 如何使用? 添加以下依赖 …

什么是接口、接口测试、接口自动化测试、你分的清楚吗?

目录 前言: 服务端接口测试介绍 什么是服务端? 什么是接口? 什么是接口测试? 为什么要做接口测试? 如何做接口测试? 接口测试自动化介绍 为什么是接口测试自动化? 为什么要做接口测试自…

什么是动态域名解析?域名怎么解析到内网IP

首先说说什么是域名解析,域名解析就是把域名解析成一个ip地址,我们大多数人都喜欢记忆域名,但是机器只认识IP地址,把这个IP地址对应相关域名,这就叫域名解析。动态域名与动态域名解析是相互关联的关系,通过…