当前位置: 首页 > 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.二…...

DeepSeek-R1补全能力封测倒计时(仅剩72小时开放API灰度权限):这份内部测试SOP已被3家头部科技公司紧急采购

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek-R1代码补全能力封测全景概览 DeepSeek-R1 是深度求索&#xff08;DeepSeek&#xff09;推出的高性能开源推理模型&#xff0c;在代码补全场景中展现出显著的上下文理解力与多语言泛化能力。本…...

TorchDynamo与TorchInductor:PyTorch编译器生态的完整解析

TorchDynamo与TorchInductor&#xff1a;PyTorch编译器生态的完整解析 【免费下载链接】torchdynamo A Python-level JIT compiler designed to make unmodified PyTorch programs faster. 项目地址: https://gitcode.com/gh_mirrors/to/torchdynamo TorchDynamo 是一个…...

通过curl命令快速测试Taotoken大模型API的连通性与返回格式

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过curl命令快速测试Taotoken大模型API的连通性与返回格式 在集成大模型能力到应用时&#xff0c;开发者通常需要一种快速、轻量的…...

DAIR-V2X-V数据集深度评测:与KITTI、nuScenes比,它到底强在哪?

DAIR-V2X-V数据集深度评测&#xff1a;与KITTI、nuScenes比&#xff0c;它到底强在哪&#xff1f; 当技术团队着手开发面向中国道路的自动驾驶系统时&#xff0c;数据集的选择往往成为第一个关键决策点。过去十年间&#xff0c;KITTI和nuScenes等国际数据集一直是行业标杆&…...

API渗透测试:契约驱动的协议/语义/架构三层攻防

1. 为什么“API渗透测试”不是Web渗透的简单延伸&#xff1f;很多人刚接触API安全时&#xff0c;第一反应是&#xff1a;“不就是把Burp Suite抓到的HTTP请求换个参数发一发&#xff1f;跟测网页表单差不多。”我2018年第一次接手某金融类SaaS平台的API安全评估时&#xff0c;也…...

利用 Taotoken 多模型能力为智能客服场景提供备份路由

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 利用 Taotoken 多模型能力为智能客服场景提供备份路由 智能客服系统是许多企业与用户交互的关键入口&#xff0c;其响应能力和服务…...

League Akari:英雄联盟客户端智能自动化工具包实战指南

League Akari&#xff1a;英雄联盟客户端智能自动化工具包实战指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akari是一款基于英雄…...

代码质量保卫战,从人工Review到DeepSeek自动审查的7天转型全记录

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;代码质量保卫战的范式转移 过去十年&#xff0c;代码质量保障已从“事后拦截”转向“全程共生”。单元测试覆盖率不再是KPI终点&#xff0c;而是开发流程的呼吸节律&#xff1b;静态分析不再停留于CI流水线末尾…...

终极PDF对比指南:3分钟掌握diff-pdf高效文档核对技巧

终极PDF对比指南&#xff1a;3分钟掌握diff-pdf高效文档核对技巧 【免费下载链接】diff-pdf A simple tool for visually comparing two PDF files 项目地址: https://gitcode.com/gh_mirrors/di/diff-pdf 还在为PDF文档版本混乱而烦恼吗&#xff1f;diff-pdf作为一款开…...

告别U盘!用CentOS 7.9 + iPXE + dnsmasq搭建一个能同时装CentOS 7、AlmaLinux 8和Ubuntu 22.04的万能PXE服务器

打造全能PXE装机服务器&#xff1a;CentOS 7.9iPXEdnsmasq混合系统部署指南 当机房里的服务器数量超过两位数时&#xff0c;U盘安装系统就像用滴管给游泳池注水——效率低得令人发指。我曾用三个通宵手动安装了50台服务器&#xff0c;直到发现PXE网络装机这个"工业级"…...