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

【java10】集合中新增copyof创建只读集合

在Java中,集合(如List、Set、Map等)是编程中常用的数据结构。然而,在某些场景下,我们可能希望集合中的数据是只读的,即不允许修改集合中的元素。在Java8及之前,要实现这样的功能,我们通常需要使用Collections.unmodifiableList()等方法来创建集合的不可修改视图。在Java9中引入了of()方法来创建只读集合,在Java10中引入了copyOf()方法,为我们提供了更简洁、更直观的方式来创建只读集合。

集合的of()方法

List、Set、Map接口都有of()方法根据元素来创建只读集合,这里以List接口的of()方法为例,介绍of()方法的使用。

List.of()方法的使用:

// JAVA9中新增创建只读的方法
var strings1 = List.of("Morris","JAVA","Golang");

集合的copyOf()方法

Java 10在List、Set和Map接口中引入了一个新的方法copyOf()。这个方法允许我们创建一个不可变的集合副本,以确保集合的内容不会被修改。

在List接口中,copyOf()方法返回一个包含指定列表中所有元素的不可变列表。这意味着无法通过该列表修改原始列表的内容。

在Set接口中,copyOf()方法返回一个包含指集合中所有元素不可变集合。同样地,这个集合不允许修改。

在Map接口中,copyOf()方法返回一个包含指定映射中所有键值对的不可变映射。这个不可变映射确保了映射的内容不会被修改。

使用copyOf()方法可以方便地创建不可变的集合,这对于保护数据的完整性和安全性非常有用。它还可以作为一种简化代码的方式,减少了手动创建不可变集合的工作量。

同样的List、Set、Map接口都有copyOf()方法根据一个集合来创建只读集合,这里以List接口的copyOf()方法为例,介绍copyOf()方法的使用。

在Java10中,List接口新增了一个copyOf方法,该方法接受一个列表作为参数,并返回一个包含该列表所有元素的新列表。重要的是,这个新列表是不可修改的,即你不能向其中添加、删除或修改元素。

以下是一个简单的示例,展示了如何使用copyOf方法创建只读集合:

package com.morris.java10;import java.util.ArrayList;
import java.util.List;/*** 集合中新增copyof创建只读集合*/
public class CollectionDemo {public static void main(String[] args) {// JAVA9中新增创建只读的方法var strings1 = List.of("Morris","JAVA","Golang");// 尝试修改只读列表(会抛出UnsupportedOperationException异常)// strings1.add("hello"); // 这行代码会抛出异常// JAVA10中新增的创建只读集合的方法var strings2 = List.copyOf(strings1); //判断两个集合在内存上是否是同一个,结果为trueSystem.out.println(strings1==strings2); // true//创建一个普通集合var strings3=new ArrayList<String>();// 通过copy0f方法创建一个只读集合var strings4 = List.copyOf(strings3);//判断两个集合在内存上是否是同一个,结果为falseSystem.out.println(strings3==strings4); // false}
}

List.copyOf()方法的源码

java.util.List#copyOf

static <E> List<E> copyOf(Collection<? extends E> coll) {return ImmutableCollections.listCopy(coll);
}

java.util.ImmutableCollections#listCopy

static <E> List<E> listCopy(Collection<? extends E> coll) {if (coll instanceof List12 || (coll instanceof ListN<?> c && !c.allowNulls)) {// 如果集合本身是一个不可变集合,就直接返回自己return (List<E>)coll;} else if (coll.isEmpty()) { // implicit nullcheck of coll// 如果集合是一个空集合,返回一个空的不可变集合return List.of();} else {// 使用现有集合创建一个新的不可变集合return (List<E>)List.of(coll.toArray());}
}

相关文章:

【java10】集合中新增copyof创建只读集合

在Java中&#xff0c;集合&#xff08;如List、Set、Map等&#xff09;是编程中常用的数据结构。然而&#xff0c;在某些场景下&#xff0c;我们可能希望集合中的数据是只读的&#xff0c;即不允许修改集合中的元素。在Java8及之前&#xff0c;要实现这样的功能&#xff0c;我们…...

python小甲鱼作业001-3讲

0.Python是什么类型的语言 编译型语言不同&#xff0c;Python 代码在执行时由解释器直接逐行解释执行&#xff0c;无需先编译成机器语言。这使得开发过程更快&#xff0c;因为你可以即时运行并测试你的代码。 Python 在运行时自动推断变量的类型&#xff0c;无需在代码中显式声…...

做电商,错过了2020年的抖音!那2024一定要选择视频号小店!

哈喽~我是电商月月 电商老板们集合了&#xff0c;问大家一个问题: 如果能让你回到三四年前&#xff0c;抖音才步入大众视野&#xff0c;这时候让你去做抖音小店&#xff0c;你愿意吗&#xff1f; 我敢相信&#xff01;很多&#xff0c;错过当年抖音红利的商家&#xff0c;一…...

赛氪网与武汉外语外事职业学院签署校企合作,共创职业教育新篇章

5月23日下午14:00&#xff0c;武汉外语外事职业学院在藏龙岛校区食堂三楼报告厅隆重举行了2024年职业教育活动周优秀校外实习基地表彰仪式。本次活动旨在表彰在职业教育领域作出突出贡献的校外实习基地&#xff0c;同时加强校企合作&#xff0c;共同推动职业教育的发展。作为重…...

如何在文档中有效添加网格:技巧与实例

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;为何添加网格至关重要 二、网格添加的基本步骤 1. 确定网格类型和样式…...

设计模式10——装饰模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 装饰模式 是一种结构型模式。…...

如果返回的json 中有 ‘///’ 转换

// 将返回数据的三条/和替换空 rowData.Jsonobj rowData.Jsonobj .replace(/^\s*\/\/\/.*$/gm, //); // 将返回的替换成" 并且外面加个"" rowData.Jsonobj "${rowData.Jsonobj .replace(//g, ")}"; // 转换回来数据用两个 JSON.parse(JSON.par…...

JAVA学习-练习试用Java实现“多线程问题”

问题&#xff1a; 1.程序中需要开启两个线程(线程1和线程2) 2.线程1固定5秒钟执行一次 3.线程2固定10秒钟执行一次 4.开启程序如何做到线程1执行完成后再执行线程2并且在之后无论谁先执行都需等待对方执行完成后才可以开始执行 解答思路&#xff1a; 要实现线程 1 执行完成…...

SQOOP详细讲解

SQOOP安装及使用 SQOOP安装及使用SQOOP安装1、上传并解压2、修改文件夹名字3、修改配置文件4、修改环境变量5、添加MySQL连接驱动6、测试准备MySQL数据登录MySQL数据库创建student数据库切换数据库并导入数据另外一种导入数据的方式使用Navicat运行SQL文件导出MySQL数据库impo…...

【Unity入门】认识Unity编辑器

Unity 是一个广泛应用于游戏开发的强大引擎&#xff0c;从 1.0 版本开始到现在&#xff0c;其编辑器的基本框架一直保持稳定。其基于组件架构的设计&#xff0c;使得界面使用起来直观且高效。为了更好地理解 Unity 的界面&#xff0c;我们可以将其比喻为搭建一个舞台。以下是对…...

Spring控制重复请求

通过AOP拦截所有请求&#xff0c;控制在规定时间内请求次数。 1&#xff1a;添加maven <dependency><groupId>net.jodah</groupId><artifactId>expiringmap</artifactId><version>0.5.10</version> </dependency> 2&#x…...

AWS安全性身份和合规性之Key Management Service(KMS)

AWS Key Management Service&#xff08;KMS&#xff09;是一项用于创建和管理加密密钥的托管服务&#xff0c;可帮助客户保护其数据的安全性和机密性。 比如一家医疗保健公司需要在AWS上存储敏感的病人健康数据&#xff0c;需要对数据进行加密以确保数据的机密性。他们使用AW…...

esp32 固件备份 固件恢复

首先是固件备份&#xff0c;这个在产品的工程管理中还是相当重要的。由于工具链的更新&#xff08;工具版本&#xff09;&#xff0c;以及板子或其上物料的变更&#xff08;硬件版本&#xff09;&#xff0c;或者新的库的导入或原有库的删除&#xff0c;PCBA是分分钟有可能死给…...

linux开发之设备树四、设备树中断节点

中断节点 这里是由原厂的BSP工程师写的一部分 在CPU的外部有一个GIC控制器&#xff0c;外设会连接在GIC控制器上 设备树是对硬件进行描述的&#xff0c;所以设备树会对CPU进行描述&#xff0c;也要对GIC 控制器进行描述&#xff0c;这部分的代码由原厂的BSP工程师进行编写&…...

基于STM32实现智能楼宇对讲系统

目录 引言环境准备智能楼宇对讲系统基础代码示例&#xff1a;实现智能楼宇对讲系统 音频输入和输出按键控制显示屏和用户界面网络通信应用场景&#xff1a;楼宇安防与智能家居问题解决方案与优化收尾与总结 1. 引言 本教程将详细介绍如何在STM32嵌入式系统中使用C语言实现智能…...

面试专区|【DevOps-46道DevOps高频题整理(附答案背诵版)】

简述什么是 DevOps工作流程 &#xff1f; DevOps工作流程是一种将开发和运维团队紧密结合起来的方法&#xff0c;旨在实现软件开发和交付的高效性和可靠性。它强调自动化和持续集成&#xff0c;以便频繁地进行软件交付和部署。 DevOps工作流程通常包括以下阶段&#xff1a; …...

算法基础之台阶-Nim游戏

台阶-Nim游戏 核心思想&#xff1a;博弈论 可以看作第i阶台阶上有i个含有i个石子的堆这样所有台阶上一共n!个堆就变成了经典Nim优化&#xff1a;发现偶数阶台阶上2n堆异或 0 , 奇数阶台阶异或 原本石子数量 因此 当遍历到奇数阶时异或一下就行 #include <iostream>…...

VUE3注册指令的方法

指令注册只能全局指令和选项式页面指令,composition api没有页面指令 选项式页面指令 <template><div class"home"><h3>自定义指令</h3><div class"from"><el-input type"text" v-focus v-model"name&q…...

【Python】 Python 字典查询:‘has_key()‘ 方法与 ‘in‘ 关键字的比较

基本原理 在 Python 中&#xff0c;字典&#xff08;dict&#xff09;是一种非常常用的数据结构&#xff0c;用于存储键值对。字典的查询操作是编程中常见的任务之一。在 Python 2.x 版本中&#xff0c;has_key() 方法被用来检查字典中是否存在某个键。然而&#xff0c;在 Pyt…...

IDEA通过tomcat运行注意事项

配置run--》edit configurations 以下的A B部分要保持一致 A和B的路径要保持一致...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...