JavaSE——集合16:不可变集合

目录

一、不可变集合基本介绍

二、创建不可变的List集合

三、创建不可变的Set集合

四、创建不可变的Map集合

(一)最多10个键值对 

(二) 键值对的数量超过10个

五、总结


一、不可变集合基本介绍

不可变集合:不可以被修改的集合。包括长度、内容等。

应用场景:1.如果某个数据不能被修改,把它防御性地拷贝到不可变集合中是个很好的实践。

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

简单理解:不想让别人修改集合中的内容。

二、创建不可变的List集合

public class ImmutableDemo1 {public static void main(String[] args) {/*创建不可变的List集合"张三", "李四", "王五", "赵六"*///一旦创建完毕之后,是无法进行修改的,在下面的代码中,只能进行查询操作List<String> list = List.of("张三", "李四", "王五", "赵六");System.out.println(list.get(0));System.out.println(list.get(1));System.out.println(list.get(2));System.out.println(list.get(3));System.out.println("---------------------------");for (String s : list) {System.out.println(s);}System.out.println("---------------------------");Iterator<String> it = list.iterator();while (it.hasNext()) {String s = it.next();System.out.println(s);}System.out.println("---------------------------");for (int i = 0; i < list.size(); i++) {String s = list.get(i);System.out.println(s);}System.out.println("---------------------------");// list.remove("李四");// list.add("aaa");// list.set(0,"aaa");}
}

三、创建不可变的Set集合

当我们要获取一个不可变的Set集合时,里面的参数一定要保证唯一性。

public class ImmutableDemo2 {public static void main(String[] args) {/*创建不可变的Set集合"张三", "李四", "王五", "赵六"               */// 一旦创建完毕之后,是无法进行修改的,在下面的代码中,只能进行查询操作Set<String> set = Set.of("张三", "张三", "李四", "王五", "赵六");for (String s : set) {System.out.println(s);}System.out.println("-----------------------");Iterator<String> it = set.iterator();while (it.hasNext()) {String s = it.next();System.out.println(s);}System.out.println("-----------------------");//set.remove("王五");}
}

四、创建不可变的Map集合

  1. 键是不能重复的
  2. Map里面的of方法,参数是有上限的,最多只能传递20个参数,10个键值对
  3. 如果我们要传递多个键值对对象,数量大于10个,在Map接口中还有一个方法

(一)最多10个键值对 

public class ImmutableDemo3 {public static void main(String[] args) {// 一旦创建完毕之后,是无法进行修改的,在下面的代码中,只能进行查询操作Map<String, String> map = Map.of("张三", "南京", "李四", "北京","王五", "上海", "赵六", "广州", "孙七", "深圳","周八", "杭州", "吴九", "宁波", "郑十", "苏州","刘一", "无锡", "陈二", "嘉兴");Set<String> keys = map.keySet();for (String key : keys) {String value = map.get(key);System.out.println(key + "=" + value);}System.out.println("--------------------------");Set<Map.Entry<String, String>> entries = map.entrySet();for (Map.Entry<String, String> entry : entries) {String key = entry.getKey();String value = entry.getValue();System.out.println(key + "=" + value);}System.out.println("--------------------------");}
}

(二) 键值对的数量超过10个

public class ImmutableDemo4 {public static void main(String[] args) {// 1.创建一个普通的Map集合HashMap<String, String> hm = new HashMap<>();hm.put("张三", "南京");hm.put("李四", "北京");hm.put("王五", "上海");hm.put("赵六", "北京");hm.put("孙七", "深圳");hm.put("周八", "杭州");hm.put("吴九", "宁波");hm.put("郑十", "苏州");hm.put("刘一", "无锡");hm.put("陈二", "嘉兴");hm.put("aaa", "111");// 2.利用上面的数据来获取一个不可变的集合/*//获取到所有的键值对对象(Entry对象)Set<Map.Entry<String, String>> entries = hm.entrySet();//把entries变成一个数组Map.Entry[] arr1 = new Map.Entry[0];//toArray方法在底层会比较集合的长度跟数组的长度两者的大小//如果集合的长度 > 数组的长度 :数据在数组中放不下,此时会根据实际数据的个数,重新创建数组//如果集合的长度 <= 数组的长度:数据在数组中放的下,此时不会创建新的数组,而是直接用Map.Entry[] arr2 = entries.toArray(arr1);//不可变的map集合Map map = Map.ofEntries(arr2);map.put("bbb","222");*/// Map<Object, Object> map = Map.ofEntries(hm.entrySet().toArray(new Map.Entry[0]));// JDK10之后的特性Map<String, String> map = Map.copyOf(hm);// map.put("bbb","222");}
}

五、总结

  1. 不可变集合的特点:定义完成后不可以修改、添加、删除
  2. 创建不可变集合的方法:List、Set、Map接口中,都存在of方法可以创建不可变集合
  3. 三种方式的细节:
  • List:直接用
  • Set:元素不能重复
  • Map:元素不能重复,键值对数量最多是10个;JDK10以后,超过10个用copyOf方法

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

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

相关文章

WPF基础权限系统

一.开发环境 VisualStudio 2022NET SDK 8.0Prism 版本 8.1.97Sqlite 二. 功能介绍 WPF 基础权限系统&#xff0c;是一个支持前后端分离设计的 客户端(C/S)项目&#xff0c;该示例项目前端xaml使用UI库 &#xff0c;Material Design Themes UI 来构建用户界面&#xff0c;确保…

C# -- Abstract、Virtual、interface

一、Virtual方法&#xff08;虚方法&#xff09; 1&#xff09;virtual 关键字用于在基类&#xff08;父类&#xff09;中修饰方法 2&#xff09;基类中定义了virtual方法&#xff0c;派生类中使用override重写该方法 二、Abstract方法&#xff08;抽象方法&#xff09; 1&…

【ssh】Mac 使用 ssh 连接阿里云报错:Connection reset by 8.155.1.xxx port 22

Mac 使用 ssh 连接阿里云报错&#xff1a;Connection reset by 8.155.1.xxx port 22 问题描述解决办法 问题描述 Connection reset by 8.155.1.xxx port 22解决办法 关掉代理 VPN

CTFHUB技能树之XSS——存储型

开启靶场&#xff0c;打开链接&#xff1a; 发现地址栏中的URL没有GET传参&#xff0c;而且这次是“Hello&#xff0c;no name” 还是跟反射型一样的流程&#xff1a; 先注入一下看看&#xff1a; <script>alert(1)</script> 但界面的结果还是“Hello&#xff0c…

【网络协议】之 HTTP 协议详解

HTTP 协议是 Web 的基石&#xff0c;它定义了客户端和服务器之间的通信规则。本文将深入地探讨 HTTP 的核心概念&#xff0c;包括工作原理、请求方法、状态码以及不同 HTTP 版本的演进。 一、HTTP 的工作原理 HTTP 协议基于客户端-服务器模型&#xff0c;遵循请求-响应的循环&…

FineReport 计算同比增长

1、数据库查询 SELECTt1.年,t1.月,t1.总金额 AS 同期金额,t1.仓库名称,t2.总金额 AS 上期金额 FROMtest t1LEFT JOIN test t2 ON ( t1.年 t2.年 1 ) AND t1.月 t2.月 AND t1.仓库名称 t2.仓库名称2、配置字段 月份字段加后缀 月 数据列加后缀 计算同比增长率 if(LEN(B3)0 …

2024年五一杯数学建模C题煤矿深部开采冲击地压危险预测求解全过程论文及程序

2024年五一杯数学建模 C题 煤矿深部开采冲击地压危险预测 原题再现&#xff1a; “煤炭是中国的主要能源和重要的工业原料。然而&#xff0c;随着开采深度的增加&#xff0c;地应力增大&#xff0c;井下煤岩动力灾害风险越来越大&#xff0c;严重影响着煤矿的安全高效开采。在…

VScode背景更改

效果 实现方法 第0步 以管理员身份运行VScode 首先 需要安装这个扩展 然后 接下来 找到配置文件 再后来 在配置文件的下面但不超过最后一个大括号的地方加入以下内容 "update.enableWindowsBackgroundUpdates": true,"background.fullscreen": {…

Nature 正刊丨群体爆发中的神经元序列在人类皮层中编码信息

01摘要 传统上&#xff0c;神经编码是通过对不同刺激的放电率和潜伏期的变化来检查的1,2,3,4,5。然而&#xff0c;神经元群体也可能表现出短暂的尖峰活动爆发&#xff0c;其中神经元以特定的时间顺序或序列放电6,7,8。人脑可以利用群体爆发中的这些神经元序列来有效地表示信息…

React中的useState和useEffect解析

一、组件状态管理——useState 1.定义 useState 是一个 React Hook&#xff08;函数&#xff09;&#xff0c;它允许我们向组件添加一个状态变量&#xff0c;从而控制影响组件的渲染结果 和普通JS变量不同的是&#xff0c;状态变量一旦发生变化组件的视图UI也会跟着变化&…

力扣 中等 82.删除排序链表中的重复元素 II

文章目录 题目介绍题解 题目介绍 题解 只需在83题基础上加一个while循环即可 class Solution {public ListNode deleteDuplicates(ListNode head) {ListNode dummy new ListNode(101, head);ListNode cur dummy;while (cur.next ! null && cur.next.next ! null) {…

汇编程序设计

文章目录 语句类型语句格式指令助记符操作数常量变量和符号运算符算数运算符逻辑运算符关系运算符分析运算符综合运算符优先级 伪指令数据定义伪指令符号定义伪指令标号定义伪指令&#xff1f;段定义伪指令段寻址伪指令过程定义伪指令程序计数器和定位伪指令&#xff1f;宏定义…

诺贝尔物理学奖与机器学习、神经网络:一场跨时代的融合与展望

诺贝尔物理学奖与机器学习、神经网络&#xff1a;一场跨时代的融合与展望 机器学习与神经网络的崛起 机器学习与神经网络的发展前景 机器学习和神经网络的研究与传统物理学的关系 总结 2024年&#xff0c;诺贝尔物理学奖颁给了机器学习与神经网络&#xff0c;这一具有里程碑…

一些关于FMEA在供应链风险管理中的实际应用案例_SunFMEA

【大家好&#xff0c;我是唐Sun&#xff0c;唐Sun的唐&#xff0c;唐Sun的Sun。一站式数智工厂解决方案服务商】 FMEA&#xff08;失效模式与影响分析&#xff09;在供应链风险管理中的实际应用案例&#xff1a; 案例一&#xff1a;某电子制造企业 该企业在生产一款新型智能手…

4 -《本地部署开源大模型》在Ubuntu 22.04系统下部署运行ChatGLM3-6B模型

在Ubuntu 22.04系统下部署运行ChatGLM3-6B模型 大模型部署整体来看并不复杂&#xff0c;且官方一般都会提供标准的模型部署流程&#xff0c;但很多人在部署过程中会遇到各种各样的问题&#xff0c;很难成功部署&#xff0c;主要是因为这个过程会涉及非常多依赖库的安装和更新及…

Spark安装

Downloads | Apache Spark 拖动安装包 上传虚拟机 # 解压锁环境就安装好能使用 tar -zxvf spark-3.3.1-bin-hadoop3.tgz# 修改文件名称 mv spark-3.3.1-bin-hadoop3 spark-local 1.Local模式 测试案例&#xff1a;计算圆周率π # Usage: spark-submit [options] <app ja…

AtCoder Beginner Contest 375 F - Road Blocked

AtCoder Beginner Contest 375 F - Road Blocked 题目大意 给你一个n个点m条边的无向图&#xff0c;接下来有两种操作 1.删除编号为 i i i 的边 2.询问 x , y x,y x,y 两点之间的最短路 思路 注意到 n < 300 n<300 n<300 &#xff0c;而且我我们需要任意两点最…

界面控件Telerik UI for WPF 2024 Q3亮点 - 支持禁用数据过滤等

Telerik UI for WPF拥有超过100个控件来创建美观、高性能的桌面应用程序&#xff0c;同时还能快速构建企业级办公WPF应用程序。UI for WPF支持MVVM、触摸等&#xff0c;创建的应用程序可靠且结构良好&#xff0c;非常容易维护&#xff0c;其直观的API将无缝地集成Visual Studio…

HarmonyOS NEXT 应用开发实战(七、知乎日报轮播图的完整实现)

在今天的博文中&#xff0c;我们将深入探讨如何在 HarmonyOS NEXT 中使用 ArkUI 实现一个轮播图组件。我们将通过一个示例代码来演示这个完整的过程&#xff0c;其中包含获取数据、管理数据源以及渲染组件等多个部分。 先来看下最终实现效果&#xff1a; 项目准备 首先&#…

Deep Learning

深度学习 文章目录 前言面向开发人员的 NVIDIA AI 平台每个 AI 框架 - 加速统一平台从开发到部署前言 深度学习是 AI 和机器学习的一个子集,它使用多层人工神经网络在对象检测、语音识别、语言翻译等任务中提供最先进的准确性。 深度学习与传统机器学习技术的不同之处在于,深…