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

server/2025/1/16 1:48:58/

一、定义

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

二、创建不可变集合

【注意】:

此方法是在JDK9中引入的。

2-1、list不可变集合 

示例:

java">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 的一种常见方式。

java">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:

java">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

java">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());}}
}

三、小结


http://www.ppmy.cn/server/158709.html

相关文章

C#,入门教程(27)——应用程序(Application)的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(26)——数据的基本概念与使用方法https://blog.csdn.net/beijinghorn/article/details/124952589 一、什么是应用程序 Application&#xff1f; 应用程序是编程的结果。一般把代码经过编译&#xff08;等&#xff09;过程&#…

碰一碰发视频源码搭建技术剖析,支持OEM

在当下数字化信息高速传播的时代&#xff0c;碰一碰发视频功能以其便捷性和创新性&#xff0c;为信息交互带来了全新的体验。本文将深入探讨该功能的源码搭建技术&#xff0c;助力开发者实现这一充满创意的应用。 一、技术选型 移动端开发&#xff1a;选用React Native作为移动…

C#语言的数据结构

C#语言的数据结构探讨 数据结构是计算机科学中一种用于组织、存储和管理数据的方式。有效地使用数据结构能使算法更加高效&#xff0c;并提高程序的性能。在C#语言中&#xff0c;我们可以构建和使用多种数据结构&#xff0c;以满足不同的需求。本文将介绍C#中的常用数据结构&a…

CentOS 9 Stream 中查看 Python 版本并升级 Python

CentOS 9 Stream 中查看 Python 版本并升级 Python 1. 查看当前 Python 版本2. 升级 Python 版本&#xff08;1&#xff09;安装开发工具&#xff08;2&#xff09;安装必要的依赖包&#xff08;3&#xff09;下载和安装新版本的 Python&#xff08;4&#xff09;验证安装 3. …

使用 Java 操作 Excel 的实用教程

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…

SQLite Indexed By

在SQLite中&#xff0c;"Indexed By" 是一个用于指定查询时必须使用特定索引的子句。当您在SQLite中使用"INDEXED BY"子句时&#xff0c;您是在告诉数据库在执行查询时必须使用特定的索引来检索数据。如果指定的索引不存在或不能用于查询&#xff0c;那么S…

机器学习 - 常用的损失函数(交叉熵、Hinge)

损失函数是一个非负实数函数&#xff0c;用来量化模型预测和真实标签之间的差异. 上一篇文章介绍了2种常用的损失函数&#xff0c;下面介绍另外2种常用的损失函数. 一、Hinge 损失函数 Hinge 损失函数是一种常用于分类任务&#xff08;尤其是支持向量机&#xff0c;SVM&…

springmvc的获取请求数据

在使用 SpringMVC 开发 web 应用时&#xff0c;我们经常需要从用户的请求中获取数据。不管是表单提交、查询参数&#xff0c;还是路径上的数据&#xff0c;SpringMVC 都为我们提供了简单而强大的方式来获取这些数据。 1. 使用 RequestParam 获取查询参数 基本使用&#xff1a…