如何理解Java不可变集合?有什么使用场景?

news2024/9/23 22:47:07

目录

1. 怎样理解不可变集合?

2. 不可变集合的应用场景

3. 不可变集合的创建和使用?


1. 怎样理解不可变集合?

温馨提示:JDK8版本中不支持不可变集合,建议升级至JDK11版本以上!!!

通常情况下,我们所说的不可变主要针对于基本数据类型和引用数据类型。

对于基本数据类型而言,不可变通常意味着值不能再发生改变,如下代码,

int number = 100;
final int number2 = 200;

number 没有被 final 修饰,所以后续代码中我们可以对 number 的值进行修改;

number2 被 final 修饰,所以后续代码中不可再对 number2 的值进行修改;

对于引用数据类型而言,不可变通常说的是内存地址(也就是引用)不可变,但引用的值是可以改变的;

而今天所要说的不可变集合则更为特殊,不可变集合被创建之后,集合的长度不可变,内容也不能改,只能对不可变集合进行查询操作,不能进行增删改操作。

2. 不可变集合的应用场景

(1)如果某些数据不希望被修改,把它放在不可变集合中是一个很好的选择;

(2)当集合对象被不可信的库调用时,集合内部数据不可变也保证了数据的安全性;

不可变集合最经典的一个使用场景就是我们常玩的斗地主,斗地主中已经规定好了的规则,我们就可以把它放在不可变数组中,这些规则不能修改,也不能再继续添加,只能按照他已经规定好的游戏规则去进行。

3. 不可变集合的创建和使用?

在 Java 中,创建不可变集合直接调用 xxx.of 静态方法即可,并且在创建的时候就需要对集合中的值进行初始化,如下代码所示

public static void main(String[] args) {
        // 创建不可变集合 list
        List<String> list = List.of("张三","李四","abc");
        // 创建不可变集合 set
        Set<String> set = Set.of("占山", "lisi", "abcc");
        // 创建不可变集合 map
        Map<String,String> map = Map.of("1","a","2","b","3","c");
        System.out.println(list);
        System.out.println(set);
        System.out.println(map);
    }

然后我们调用 list.add() 方法,发现方法报错,不支持的操作异常,下面的 Set 和 Map 我就不重复尝试了,感兴趣的小伙伴可以自行动手操作一遍。

还有一点需要额外注意,不可变 Set 集合在进行初始化的过程中,也是不允许有相同的元素存在的哦,如果存在相同的元素,在打印时会报错! 如下所示

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

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

相关文章

FPGA时钟资源详解(4)——区域时钟资源

FPGA时钟系列文章总览&#xff1a;FPGA原理与结构&#xff08;14&#xff09;——时钟资源https://ztzhang.blog.csdn.net/article/details/132307564 目录 一、概述 二、Clock-Capable I/O 三、I/O 时钟缓冲器 —— BUFIO 3.1 I/O 时钟缓冲器 3.2 BUFIO原语 四、区域时钟…

SpringBoot+Vue前后端分离项目在Linux系统中基于Docker打包发布,并上传镜像到阿里镜像私仓

文章目录 SpringBootVue前后端分离项目在Linux系统中基于Docker打包发布&#xff0c;并上传镜像到阿里镜像私仓一、Java项目基于Docker打包发布1.打包应用&#xff0c;将打好的jar包放到我们的linux系统中2.新建dockerfile3.打包镜像4.测试运行5.上传镜像到阿里云免费私仓 二、…

物联网云组态是什么?部署物联网云组态有什么作用?

在信息化与工业化的深度融合进程中&#xff0c;物联网云组态以其独特的优势&#xff0c;正在成为企业数字化转型的重要工具。那么&#xff0c;物联网云组态究竟是什么呢&#xff1f;部署物联网云组态又能给企业带来哪些实质性的好处呢&#xff1f;今天&#xff0c;我们将围绕这…

聚酰亚胺PI材料难于粘接,用什么胶水粘接?那么让我们先一步步的从认识它开始(九): 聚酰亚胺PI薄膜的缺点有哪些

聚酰亚胺PI薄膜的缺点有哪些 聚酰亚胺&#xff08;Polyimide&#xff0c;简称PI&#xff09;薄膜是一种高性能、高温、高压、化学稳定、耐磨损、耐火、耐腐蚀的薄膜材料&#xff0c;具有优良的电绝缘性能、低介电常数和低介电损耗&#xff0c;能够有效阻止电流流动&#xff0c…

主流公链 - Solana

探索Solana区块链&#xff1a;下一代高性能区块链平台 1. Solana简介 Solana是一个高性能的区块链平台&#xff08;TPS能达到10W级别&#xff09;&#xff0c;旨在实现高吞吐量和低延迟的区块链交易处理。它采用了一系列创新技术&#xff0c;其中包括Proof of History (PoH)&a…

状态机高阶讲解-13

2213 01:31:54,290 --> 01:31:56,604 那么这里就出现了一个Hello这样 2214 01:31:56,604 --> 01:31:59,549 说明这个对象已经创建了嘛 2215 01:31:59,549 --> 01:31:59,970 对吧 2216 01:32:04,090 --> 01:32:06,868 如果想看到源代码的话 2217 01:32:06,868 -…

Unity VisionOS开发流程

Unity开发环境 Unity Pro, Unity Enterprise and Unity Industry 国际版 Mac Unity Editor(Apple silicon) visionOS Build Support (experimental) 实验版 Unity 2022.3.11f1 NOTE: 国际版与国服版Pro账通用&#xff0c;需要激活Pro的许可证。官方模板v0.6.2,非Pro版本会打…

“宋仕强论道”系列讲座的文章

“宋仕强论道”系列讲座的文章暨宋仕强先生&#xff08;Huaqiangbei Songshiqiang&#xff09;研究华强北模式和华强北文化的系列文章&#xff0c;再次迎来更新&#xff01;《宋仕强论道华强北科技创新与电子信息产业生态》由新华社新华瞭望网在主页首发&#xff0c;当日点击量…

【python】获取4K壁纸保存到本地文件夹【附源码】

图片信息丰富多彩&#xff0c;许多网站上都有大量精美的图片资源。有时候我们可能需要批量下载这些图片&#xff0c;而手动一个个下载显然效率太低。因此&#xff0c;编写一个简单的网站图片爬取程序可以帮助我们高效地获取所需的图片资源。 目标网站&#xff1a; 如果出现模…

Java毕业设计 基于SSM网上二手书店系统

Java毕业设计 基于SSM网上二手书店系统 SSM jsp 网上二手书店系统 功能介绍 用户&#xff1a;首页 图片轮播 图书查询 图书分类显示 友情链接 登录 注册 图书信息 图片详情 评价信息 加入购物车 资讯信息 资讯详情 个人中心 个人信息 修改密码 意见信息 图书收藏 已经付款 邮…

【MySQL】11. 复合查询(重点)

4. 子查询 子查询是指嵌入在其他sql语句中的select语句&#xff0c;也叫嵌套查询 4.1 单行子查询 返回一行记录的子查询 显示SMITH同一部门的员工 mysql> select * from emp where deptno (select deptno from emp where ename SMITH); -----------------------------…

12种卫星X波段SAR卫星简介

X波段SAR卫星简介及相关12种卫星 简介 SAR卫星是一种主动式微波遥感卫星,通过向地面发射电磁波并接收目标反射信号成像,可全天时全天候对地观测。常见的Sentinel-1是一颗C波段的合成孔径雷达(Synthetic Aperture Radar, SAR)卫星&#xff0c;TerraSAR-X是一颗X波段的SAR卫星。…

蓝桥杯练习题——博弈论

1.必胜态后继至少存在一个必败态 2.必败态后继均为必胜态 Nim游戏 思路 2 3&#xff0c;先手必赢&#xff0c;先拿 1&#xff0c;然后变成 2 2&#xff0c;不管后手怎么拿&#xff0c;先手同样操作&#xff0c;后手一定先遇到 0 0 a1 ^ a2 ^ a3 … ^ an 0&#xff0c;先…

c语言--内存函数的使用(memcpy、memcmp、memset、memmove)

目录 一、memcpy()1.1声明1.2参数1.3返回值1.4memcpy的使用1.5memcpy模拟使用1.6注意 二、memmove()2.1声明2.2参数2.3返回值2.4使用2.5memmove&#xff08;&#xff09;模拟实现 三、memset3.1声明3.2参数3.3返回值3.4使用 四、memcmp()4.1声明4.2参数4.3返回值4.4使用 五、注…

mysql增量备份与修复

MySQL数据库增量恢复 1.一般恢复 将所有备份的二进制日志内容全部恢复 2.基于位置恢复 数据库在某一时间点可能既有错误的操作也有正确的操作 可以基于精准的位置跳过错误的操作 发生错误节点之前的一个节点&#xff0c;上一次正确操作的位置点停止 3.基于时间点恢复 跳过…

群晖NAS安装Video Station结合内网穿透实现公网访问本地影音文件

文章目录 1.使用环境要求&#xff1a;2.下载群晖videostation&#xff1a;3.公网访问本地群晖videostation中的电影&#xff1a;4.公网条件下使用电脑浏览器访问本地群晖video station5.公网条件下使用移动端&#xff08;搭载安卓&#xff0c;ios&#xff0c;ipados等系统的设备…

宽光谱SOA光芯片设计(一)

-本文翻译自由Geoff H. Darling于2003年撰写的文章。尽管文章较早&#xff0c;但可以了解一些SOA底层原理&#xff0c;并可看到早期SOA研究的思路和过程&#xff0c;于今仍有很高借鉴价值。 摘要 本文介绍一种新型宽光谱半导体光放大器&#xff08;SOA&#xff09;技术&#x…

学成在线项目学习

技术栈 学成在线服务端基于Spring Boot构建&#xff0c;采用Spring Cloud微服务框架。 持久层&#xff1a;MySQL、MongoDB、Redis、ElasticSearch 数据访问层&#xff1a;使用Spring Data JPA 、Mybatis、Spring Data Mongodb等 业务层&#xff1a;Spring IOC、Aop事务控制、S…

数据库系统概论(超详解!!!) 第四节 关系数据库标准语言SQL(Ⅲ)

1.连接查询 连接查询&#xff1a;同时涉及多个表的查询 连接条件或连接谓词&#xff1a;用来连接两个表的条件 一般格式&#xff1a; [<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2> [<表名1>.]<列名1> BETWEEN [&l…

由浅到深认识Java语言(25):正则表达式

该文章Github地址&#xff1a;https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.c…