当前位置: 首页 > news >正文

java基础概念55-不可变集合

一、定义

不可变集合:不可以被修改的集合,只能查询。(长度、内容均不可被修改)

二、创建不可变集合

【注意】:

此方法是在JDK9中引入的。

2-1、list不可变集合 

示例:

import java.util.List;public class ListOfExample {public static void main(String[] args) {// 创建一个不可变的列表List<String> immutableList = List.of("apple", "banana", "cherry");// 尝试添加元素,会抛出 UnsupportedOperationException// immutableList.add("date"); // 尝试修改元素,会抛出 UnsupportedOperationException// immutableList.set(0, "apricot"); // 尝试删除元素,会抛出 UnsupportedOperationException// immutableList.remove("apple")// 遍历列表for (String fruit : immutableList) {System.out.println(fruit);}// 获取列表元素System.out.println(immutableList.get(0)); }
}

使用 Collections.unmodifiableList 方法是在 JDK 8 中创建不可变 List 的一种常见方式。

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;public class ImmutableListExample {public static void main(String[] args) {// 创建一个可变的 ArrayListList<String> mutableList = new ArrayList<>();mutableList.add("Apple");mutableList.add("Banana");mutableList.add("Cherry");// 将可变的 ArrayList 转换为不可变的 ListList<String> immutableList = Collections.unmodifiableList(mutableList);// 尝试添加元素,会抛出 UnsupportedOperationException// immutableList.add("Date");// 尝试修改元素,会抛出 UnsupportedOperationException// immutableList.set(0, "Apricot");// 遍历不可变的 Listfor (String fruit : immutableList) {System.out.println(fruit);}}
}

2-2、Set不可变集合 

 

【注意】:

若是Set.of赋值重复,会报错!

set集合是没有索引的!!!

使用 Collections.unmodifiableSet 方法是在 JDK 8 中创建不可变 List 的一种常见方式。

2-3、Map不可变集合 

1、键值对数量不超过10个

自动匹配键值对!

【注意】:

key不能重复,否则会报错!

 

【注意】:Map里面的of方法,参数是有上限的最多只能传递20个参数,10个键值对

原因:

可变参数必须在形参的最后!

 【解决】:将key, value看成一个整体!

 

2、键值对数量超过10个 

示例1:

简化:

示例2:

import java.util.Map;
import static java.util.Map.entry;public class ImmutableMapExample {public static void main(String[] args) {// 创建包含多个键值对的不可变 MapMap<String, Integer> immutableMap = Map.ofEntries(entry("key1", 1),entry("key2", 2),entry("key3", 3),entry("key4", 4),entry("key5", 5),entry("key6", 6),entry("key7", 7),entry("key8", 8),entry("key9", 9),entry("key10", 10),entry("key11", 11));// 尝试添加元素,会抛出 UnsupportedOperationException// immutableMap.put("key12", 12);// 尝试修改元素,会抛出 UnsupportedOperationException// immutableMap.put("key1", 100);// 遍历 Mapfor (Map.Entry<String, Integer> entry : immutableMap.entrySet()) {System.out.println(entry.getKey() + ": " + entry.getValue());}}
}

如果,使用的 Java 版本低于 9,你可以使用 Collections.unmodifiableMap 方法将一个可变 Map 转换为不可变 Map

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;public class ImmutableMapBeforeJava9 {public static void main(String[] args) {Map<String, Integer> mutableMap = new HashMap<>();mutableMap.put("key1", 1);mutableMap.put("key2", 2);mutableMap.put("key3", 3);mutableMap.put("key4", 4);mutableMap.put("key5", 5);mutableMap.put("key6", 6);mutableMap.put("key7", 7);mutableMap.put("key8", 8);mutableMap.put("key9", 9);mutableMap.put("key10", 10);mutableMap.put("key11", 11);// 将可变 Map 转换为不可变 MapMap<String, Integer> immutableMap = Collections.unmodifiableMap(mutableMap);// 尝试添加元素,会抛出 UnsupportedOperationException// immutableMap.put("key12", 12);// 尝试修改元素,会抛出 UnsupportedOperationException// immutableMap.put("key1", 100);// 遍历 Mapfor (Map.Entry<String, Integer> entry : immutableMap.entrySet()) {System.out.println(entry.getKey() + ": " + entry.getValue());}}
}

三、小结

相关文章:

java基础概念55-不可变集合

一、定义 不可变集合&#xff1a;不可以被修改的集合&#xff0c;只能查询。&#xff08;长度、内容均不可被修改&#xff09; 二、创建不可变集合 【注意】&#xff1a; 此方法是在JDK9中引入的。 2-1、list不可变集合 示例&#xff1a; import java.util.List;public cla…...

深入理解 C++ 函数重载

在 C 中, 函数重载是一个非常强大的特性, 允许多个函数使用相同的名称, 但具有不同的参数类型. 重载解析决定了在给定的调用中, 编译器应选择哪个版本的重载函数. 本文将深入探讨 C 重载解析的工作原理, 帮助你在实际编程中更好地理解这一机制. 重载(Overload) vs 重写(Overri…...

相机和激光雷达的外参标定 - 无标定板版本

1. 实现的效果 通过本软件实现求解相机和LiDAR的外参&#xff0c;即2个传感器之间的三维平移[x, y, z]和三维旋转[roll, pitch, yaw]。完成标定后&#xff0c;可将点云投影到图像&#xff0c;效果图如下&#xff1a; 本软件的优势&#xff1a;&#xff08;1&#xff09;无需特…...

Redis 知识速览

文章目录 1. Redis 简介2. Redis 优缺点3. Redis 高性能4. Redis VM 机制5. Redis 数据类型6. 应用场景7. 持久化8. 过期策略9. 内存相关10. 线程模型11. 事务12. 集群 1. Redis 简介 定义&#xff1a;Redis 是一个用 C 语言编写的高性能非关系型&#xff08;NoSQL&#xff09…...

LeetCode 热题 100_从前序与中序遍历序列构造二叉树(47_105_中等_C++)(二叉树;递归)

LeetCode 热题 100_从前序与中序遍历序列构造二叉树&#xff08;47_105&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;递归&#xff09;&#xff1a; 代码实现代码实现&#xff08;思路一&#xff08;递归…...

使用sqlplus的easy connect时如何指定是链接到shared server还是dedicated process

在oracle配置了shared server的情况下 可以使用 :shared来指定链接到shared server也可以默认不指定 不指定的情况下会默认链接到shared server 如果想链接到 dedicated process 则必须显式指定链接到dedicated process server type的类型包括DEDICATED, SHARED, or POOLED. […...

ubuntu22.4 ROS2 安装gazebo(环境变量配置)

ubuntu版本&#xff1a;ubuntu22.4 最近在学习ROS2 视频教程古月居的入门课&#xff1a; 视频教程 文字笔记 问题 在学到关于Gazebo的时候&#xff0c;遇到下面问题&#xff1a; 运行 $ ros2 launch gazebo_ros gazebo.launch.py在这里卡住&#xff0c;不弹出gazebo 解决…...

【机器学习:十四、TensorFlow与PyTorch的对比分析】

1. 发展背景与社区支持 1.1 TensorFlow的背景与发展 TensorFlow是Google于2015年发布的开源深度学习框架&#xff0c;基于其前身DistBelief系统。作为Google大规模深度学习研究成果的延续&#xff0c;TensorFlow从一开始就定位为生产级框架&#xff0c;强调跨平台部署能力和性…...

[C++]类与对象(上)

目录 &#x1f495;1.C中结构体的优化 &#x1f495;2.类的定义 &#x1f495;3.类与结构体的不同点 &#x1f495;4.访问限定符(public,private,protected) &#x1f495;5.类域 &#x1f495;6.类的实例化 &#x1f495;7.类的字节大小 &#x1f495;8.类的字节大小特例…...

大数据技术实训:Zookeeper集群配置

一、本地模式安装部署 1&#xff09;安装前准备 &#xff08;1&#xff09;安装jdk &#xff08;2&#xff09;拷贝Zookeeper安装包到Linux系统下 &#xff08;3&#xff09;解压到指定目录 tar -zxvf zookeeper-3.5.7.tar.gz -C /opt/module/ 2&#xff09;配置修改 &am…...

HTML5 加载动画(Loading Animation)

加载动画&#xff08;Loading Animation&#xff09;详解 概述 加载动画是指在数据加载过程中&#xff0c;向用户展示的一种视觉效果&#xff0c;旨在提升用户体验&#xff0c;告知用户系统正在处理请求。它可以减少用户的等待焦虑感&#xff0c;提高界面的互动性。 常见的加…...

C语言进阶-2指针(一)

目录 1. 字符指针1.1 一般用法&#xff1a;字符指针指向单字符1.2 第二种用法&#xff0c;字符串首地址给指针变量1.3 习题,下面代码的输出结果是什么&#xff1f;为什么&#xff1f; 2. 指针数组2.1实例—— 字符指针数组2.2实例——整形指针数组2.3 例子&#xff0c;识别下下…...

【人工智能】用Python进行对象检测:从OpenCV到YOLO的全面指南

对象检测是计算机视觉领域的核心任务之一&#xff0c;广泛应用于视频监控、自动驾驶、智能安防等多个场景。随着深度学习技术的发展&#xff0c;基于传统方法的对象检测逐渐被基于神经网络的先进模型所取代。本文将系统地介绍如何使用Python进行对象检测&#xff0c;重点探讨了…...

《深度剖析算法优化:提升效率与精度的秘诀》

想象一下&#xff0c;你面前有一堆杂乱无章的数据&#xff0c;你需要从中找到特定的信息&#xff0c;或者按照一定的规则对这些数据进行排序。又或者&#xff0c;你要为一个物流公司规划最佳的配送路线&#xff0c;以降低成本和提高效率。这些问题看似复杂&#xff0c;但都可以…...

Mysql--重点篇--索引(索引分类,Hash和B-tree索引,聚簇和非聚簇索引,回表查询,覆盖索引,索引工作原理,索引失效,索引创建原则等)

索引是数据库中用于加速查询操作的重要机制。通过索引&#xff0c;MySQL可以快速定位到满足查询条件的数据行&#xff0c;而不需要扫描整个表。合理的索引设计可以显著提高查询性能&#xff0c;但不合理的索引可能会导致性能下降和磁盘空间浪费。因此&#xff0c;理解索引的工作…...

matlab使用 BP 神经网络进行数据预测的完整流程,包括数据读取、数据预处理等等

%% 初始化程序 warning off % 关闭报警信息 close all % 关闭所有图窗 clear % 清空变量 clc % 清空命令行 setdemorandstream(172) %设置随机种子为1%% 读取数据 data xlsread(Y.xlsx); %% 划分训练集…...

systemd-networkd NetworkManager 介绍

systemd-networkd 和 NetworkManager 的详细介绍 systemd-networkd 和 NetworkManager 都是 Linux 系统中常用的网络管理工具&#xff0c;但它们的设计目标和使用场景不同。以下是它们的详细介绍、功能、使用场景和差异。 1. systemd-networkd systemd-networkd 是一个由 syst…...

本地部署项目管理工具 Leantime 并实现外部访问

Leantime 是一款开源 AI 项目。它可以在本地直接运行大语言模型 LLM、生成图像、音频等。直接降低了用户使用AI的门褴。本文将详细的介绍如何利用 Docker 在本地部署 Leantime 并结合路由侠实现外网访问本地部署的 Leantime 。 第一步&#xff0c;本地部署安装 Leantime 1&am…...

PHP cURL 函数初学者完全指南

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…...

C#中的Array数组,List集合和ArrayList集合--07

目录 一.Array数组概念的简单理解 1.数组的初始化 2.数组的长度 3.数组的克隆和复制 4.数组的清空 5.数组的查找 6.数组的逆转 7.数组的拓展和缩减 8.数组的比较 9.数组的合并 10.使用Array类中的静态方法,如Array.Sort,Array.BinarySearch 等 二.Array数组进阶 1.二…...

探索未知惊喜,盲盒抽卡机小程序系统开发新启航

在消费市场不断追求新鲜感与惊喜体验的当下&#xff0c;盲盒抽卡机以其独特的魅力&#xff0c;迅速成为众多消费者热衷的娱乐与消费方式。我们紧跟这一潮流趋势&#xff0c;专注于盲盒抽卡机小程序系统的开发&#xff0c;致力于为商家和用户打造一个充满趣味与惊喜的数字化平台…...

简化复杂系统的优雅之道:深入解析 Java 外观模式

一、外观模式的本质与核心价值 在软件开发的世界里&#xff0c;我们经常会遇到这样的场景&#xff1a;一个复杂的子系统由多个相互协作的类组成&#xff0c;这些类之间可能存在错综复杂的依赖关系和交互逻辑。当外部客户端需要使用这个子系统时&#xff0c;往往需要了解多个类…...

数学复习笔记 28

前言 刷数学题非常爽啊。让我感觉自己能考一百四&#xff0c;一百五这种错觉。我和一个朋友说&#xff0c;我肯定能考一百四以上&#xff0c;他说他觉得我最多考一百二&#xff0c;笑死&#xff0c;我是这么菜的么。下面是线代第六章的例题的一些理解。我现在觉得考研数学不需…...

48V带极性反接保护-差共模浪涌防护方案

在工业自动化&#xff08;电动机驱动 / 工业机器人&#xff09;、交通基础设施&#xff08;充电桩 / 车载电子&#xff09;、安防系统&#xff08;监控摄像头 / 门禁&#xff09;、储能设备&#xff08;BMS / 离网控制器&#xff09;等领域&#xff0c;DC48V 电源因安全特低电压…...

分析Web3下数据保护的创新模式

在这个信息爆炸的时代&#xff0c;我们正站在 Web3 的门槛上&#xff0c;迎接一个以去中心化、用户主权和数据隐私为核心的新时代。Web3 不仅仅是技术的迭代&#xff0c;它更是一场关于数据权利和责任的结构性变革。本文将探讨 Web3 下数据保护的创新模式&#xff0c;以期为用户…...

MySQL 索引:为使用 B+树作为索引数据结构,而非 B树、哈希表或二叉树?

在数据库的世界里&#xff0c;性能是永恒的追求。而索引&#xff0c;作为提升查询速度的利器&#xff0c;其底层数据结构的选择至关重要。如果你深入了解过 MySQL&#xff08;尤其是其主流存储引擎 InnoDB&#xff09;&#xff0c;你会发现它不约而同地选择了 B树 作为索引的主…...

Tensorborad

一、tensorboard的基本操作 1.1 发展历史 TensorBoard 是 TensorFlow 生态中的官方可视化工具&#xff08;也可无缝集成 PyTorch&#xff09;&#xff0c;用于实时监控训练过程、可视化模型结构、分析数据分布、对比实验结果等。它通过网页端交互界面&#xff0c;将枯燥的训练…...

【Android基础回顾】一:Binder机制是什么?有什么用?

Android中的Binder机制是Android系统中最核心和最基础的进程间通讯机制。 1 什么是进程间通讯机制(IPC)&#xff1f; 众所周知&#xff0c;Android系统基于Linux开发&#xff0c;Linux系统里面本来就有进程间通讯机制。 1.1 Linux的IPC(Inter-Process Communication)概览 它…...

兼容老设备!EtherNet/IP转DeviceNet网关解决储能产线通讯难题

在新能源行业飞速发展的当下&#xff0c;工业自动化水平的高低直接影响着企业的生产效率与产品质量。JH-EIP-DVN疆鸿智能ETHERNET/IP和DEVICENET作为工业领域常用的通信协议&#xff0c;它们之间的转换应用在新能源生产线上发挥着关键作用。本文重点探讨ETHERNETIP从站转DEVICE…...

行列式的性质

1 行列式使用如下性质定义 1&#xff09;单位矩阵行列式值为 1&#xff0c; &#xff0c;对于任意单位矩阵均成立&#xff1b; 2&#xff09;当矩阵交换一行后&#xff0c;行列式值改变符号&#xff0c;如置换矩阵的行列式值为 &#xff08;根据行交换次数决定&#xff09;&…...