江苏华江建设集团网站网站建设 的公

web/2025/10/1 4:35:10/文章来源:
江苏华江建设集团网站,网站建设 的公,还有哪些网站可以做淘宝活动,化妆品网站后台Java 9集合工厂方法#xff1a;用List.of、Set.of、Map.of创建安全不可变集合 Java 9引入了革命性的集合工厂方法List.of、Set.of和Map.of#xff0c;彻底改变了开发者创建小型不可变集合的方式。这些方法不仅语法简洁#xff0c;还在安全性和性能上实现了质的飞跃。本文将…Java 9集合工厂方法用List.of、Set.of、Map.of创建安全不可变集合 Java 9引入了革命性的集合工厂方法List.of、Set.of和Map.of彻底改变了开发者创建小型不可变集合的方式。这些方法不仅语法简洁还在安全性和性能上实现了质的飞跃。本文将深入解析这些工厂方法的核心特性并通过对比传统方式展示其在实际开发中的优势。 一、新工厂方法概览 1. 方法家族 方法签名说明示例List.of(E... elements)创建不可变ListListString list List.of(A, B);Set.of(E... elements)创建不可变Set元素唯一SetInteger set Set.of(1, 2, 3);Map.of(K k1, V v1, ...)创建不可变Map最多10个键值对MapString, Integer map Map.of(a, 1, b, 2);Map.ofEntries(Map.Entry...)创建任意数量键值对的MapMap.ofEntries(entry(a, 1), entry(b, 2)) 二、核心优势 1. 真正不可变性vs 伪不可变 传统方式的问题 // Java 8的不可变集合 ListString oldList Collections.unmodifiableList(new ArrayList(Arrays.asList(A, B)) ); oldList.add(C); // 运行时抛出UnsupportedOperationException新方式 ListString newList List.of(A, B); newList.add(C); // 编译期即可通过IDE提示发现问题特性新工厂方法Collections.unmodifiableList编译期类型检查✅ 直接拒绝修改操作❌ 运行时异常防御原集合修改✅ 完全独立❌ 包装集合仍受原集合影响 2. 空值安全Null Safety List.of(A, null); // 立即抛出NullPointerException Set.of(null); // 同上 Map.of(key, null);// 值也不能为null设计哲学在集合创建时严格拒绝null避免后续NPE隐患。 3. 元素唯一性保证针对Set/Map Set.of(1, 1); // 直接抛出IllegalArgumentException Map.of(a, 1, a, 2); // 键重复抛出异常4. 性能优化 JVM针对工厂方法返回的集合做了深度优化 内存占用比new ArrayList节省约30%内存迭代速度比传统集合快2-3倍得益于紧凑存储哈希计算Set.of/Map.of在创建时预计算哈希值 三、与传统方式对比 1. 创建不可变List Java 8方式 ListString list Collections.unmodifiableList(new ArrayList(Arrays.asList(A, B)) ); // 需要两层包装内存开销大Java 9方式 ListString list List.of(A, B); // 直接返回优化后的不可变实例2. 创建不可变Set 传统方式 SetInteger set Collections.unmodifiableSet(new HashSet(Arrays.asList(1, 2, 3)) ); // 无法保证初始化时的元素唯一性新方式 SetInteger set Set.of(1, 2, 3); // 自动检查元素唯一性发现重复立即报错3. 创建不可变Map 传统方式 MapString, Integer tempMap new HashMap(); tempMap.put(a, 1); tempMap.put(b, 2); MapString, Integer map Collections.unmodifiableMap(tempMap); // 需要中间变量存在竞态条件风险新方式 MapString, Integer map Map.of(a, 1, b, 2); // 线程安全无中间状态四、使用注意事项 1. 元素限制 数量限制Map.of最多接受10个键值对超过需用Map.ofEntries类型限制不支持基本类型需用包装类List.of(1, 2, 3); // 正确自动装箱 List.of(new int[]{1}); // 错误实际类型为Listint[]2. 防御性编程 // 接收外部集合时创建防御副本 void process(ListString input) {ListString safeList List.copyOf(input); // Java 10// 或 ListString safeList List.of(input.toArray()); }3. 与Stream API结合 // 过滤后生成不可变集合 ListString filtered Stream.of(A, B, C).filter(s - s.length() 1).collect(Collectors.toUnmodifiableList());五、最佳实践场景 1. 配置参数存储 private static final SetString VALID_STATUSES Set.of(NEW, PROCESSING, COMPLETED);2. 测试数据构造 Test void testSort() {ListInteger numbers List.of(3, 1, 4);Collections.sort(numbers); // 立即抛出UnsupportedOperationException }3. 返回值保护 public ListEmployee getEmployees() {return List.copyOf(internalList); // 返回不可变副本 }六、常见问题解答 Q1为什么需要新的工厂方法 类型安全编译时即可发现修改操作性能优势专用实现比通用集合更高效语义清晰明确表达不可变意图 Q2如何创建空集合 ListString emptyList List.of(); // 空集合单例 SetInteger emptySet Set.of(); MapString, String emptyMap Map.of();Q3与Arrays.asList的区别 特性List.ofArrays.asList可变性完全不可变半可变可set不可add空值支持❌ 禁止null✅ 允许null与原数组关联❌ 独立存储✅ 共享底层数组内存占用优化后的紧凑结构包装器数组引用 七、总结 使用新工厂方法的三大理由 ️ 安全性杜绝意外修改强化空值约束 性能专为不可变场景优化内存效率更高✨ 简洁性一行代码表达创建不可变集合的意图 适用原则 优先用于静态配置数据推荐作为方法返回值防止外部修改适合存储需要确保完整性的业务数据 迁移建议 逐步替换项目中Collections.unmodifiableXXX的用法在单元测试中优先采用新语法注意检查历史代码中的null值使用 Java 9的集合工厂方法不仅是语法糖更是工程实践的重要进步。合理运用这些特性可以让代码更健壮、更高效同时降低维护成本。

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

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

相关文章

乒乓球网站建设目标中信建设有限责任公司待遇怎么样

前言:前面写过一篇PytestAllure接口自动化测试框架搭建的博客,这篇博客学习另外一款优秀的开源的接口自动化测试框架:HttpRunner,本博客主要学习如何搭建基于HttpRunner的接口自动化测试项目 PytestAllure接口自动化测试框架搭建…

医院招聘网站建设和维护人员seo常用方法

说明过程 C语言程序可以通过分文件编写来提高代码的结构性和可维护性。下面是一个简单的示例,展示了C语言程序如何分文件编写: 创建多个源文件:将程序的不同部分分别写在不同的源文件中,每个文件包含一个或多个相关的函数。比如&…

下载的网站模板怎么进入后台php做电影网站有哪些

0x01 Linux 分区简介主分区 vs 扩展分区硬盘分区表中最多能存储四个分区,但我们实际使用时一般只分为两个分区,一个是主分区(Primary Partion)一个是扩展分区(extended partition),主分区可以马上被使用但不能再分区,扩展分区必须…

网站建设与管理 ppt好的网站建设公司哪家好

linux最优秀的地方之一,就在于他的多用用户、多任务环境。 用户及用户组的概念 1、文件所有者 由于linux是一个多用户、多任务的系统。因此可能常常会有很多人同时使用这台主机来进行工作的情况发生,为了考虑每个人的隐私权以及每个人的喜好的工作环境&a…

宁都县建设局网站wordpress收费主题免费下载

1. 简介 模板方法模式是一种行为型设计模式,它定义了一个算法的骨架,将一些步骤延迟到子类中实现。这样,可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 2. 使用条件 模板方法模式适用于以下情况: 算法…

工程建设监理网站百度指数首页

在本文中,我们将深入研究ClickHouse索引。我们将对此进行详细说明和讨论: ClickHouse的索引与传统的关系数据库有何不同ClickHouse是怎样构建和使用主键稀疏索引的ClickHouse索引的最佳实践 您可以选择在自己的机器上执行本文给出的所有Clickhouse SQL…

柳州网络网站建设上海高档网站建设

在Kerberos阶段认证的AS-REQ阶段,请求包cname对应的值是用户名,当用户名存在时候,密码正确和错误两种情况下,AS-REP返回包不一样,所以可以利用这一点对域用户名进行密码喷洒攻击 域内密码喷洒工具 Kerbrute kerbrut…

网站后期的维护设计与制作网站

大家好,我是海鸽。 今天,我要和大家分享如何将请求 GPT 的案例,快速“复刻”成 GPT 网页版。这不仅简单,而且对于我们这些后端开发者来说,简直是福音! 先睹为快 看看这个界面,是不是感觉很熟…

做暖暖免费视频网站哪些人做数据监测网站

目录 事务基本概念 前置准备 Spring Boot 事务使用 编程式事务 声明式事务 Transactional 注解参数说明 Transational 对异常的处理 解决方案一 解决方案二 Transactional 的工作原理 面试题 Spring Boot 事务失效的场景有那些? 事务基本概念 事务指一…

动漫男的和女的做视频网站广州怎么做网站

原文:The ChatGPT GoldRush 译者:飞龙 协议:CC BY-NC-SA 4.0 一、ChatGPT 简介 什么是 ChatGPT? ChatGPT 是由 OpenAI 基于 GPT-4 架构创建的大型语言模型。它旨在理解和回应自然语言文本输入,使得可以与机器进行对话…

适合个人网站的名称域名注册信息怎么查

目录 一、环境准备 二、下载Tampermonkey 三、安装脚本 四、启用脚本 一、环境准备 微软自带的 edge 浏览器(电脑端) 二、下载Tampermonkey 安装地址:Tampermonkey 篡改猴(油猴脚本) 下载完成会在浏览器拓展中自动生成一个插件,此时点击管理拓展&…

资料库网站开发报价湖北专业的网瘾戒除学校有哪些

电脑休眠指的是将当前处于运行状态的数据保存在硬盘中,整机完全停止供电。通常电脑的自动休眠是有一个电源计划的,电脑如果在设定的时间内没有使用,那么就会进入自动休眠状态。然而许多人长时间不操作电脑,只是想让电脑继续执行一…

为什么要做网站推广中国十大服务外包企业

题目描述: n 只奶牛坐在一排,每个奶牛拥有 ai 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要…

白云鄂博矿网站建设为什么做免费视频网站

maven配置testng为了有用,自动测试应该运行得非常快。 否则,将不会在开发期间经常运行,甚至在开发人员工作站上的默认配置中将被忽略。 最简单的规则是只编写小型单元测试,该测试将模拟给定类的邻居。 然而,有时在IoC容…

桂林住房城乡建设厅网站哈尔滨中国建设银行网站首页

目录 目录 前言 数据准备 文档搜索 一、查询所有文档 二、全文检索 (1)全文检索 (2)自动纠错 三、范围搜索 四、短语检索 五、单词/词组搜索 六、复合搜索 前言 数据准备 PUT /students {"mappings":{&qu…

1元购类似网站架设药多少钱七牛备份wordpress

1、添加用户控件 2、编写水泵UI 控件中用到了Viewbox控件,Viewbox控件是WPF中一个简单的缩放工具,它可以帮助你放大或缩小单个元素,同时保持其宽高比。通过样式和属性设置,你可以创建出既美观又功能丰富的用户界面。在实际开发中…

网站分类目录为什么大网站的百度快照更新速度慢还排第一

大家好,我是若川。持续组织了6个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列这本新…

镇江网站优化少女论坛资源

FL Studio2024版是一款在国内非常受欢迎的多功能音频处理软件,我们可以通过这款软件来对多种不同格式的音频文件来进行编辑处理。而且FL Studio 2024版还为用户们准备了超多的音乐乐器伴奏,我们可以直接一键调取自己需要的音调。 FL Studio 2024版不仅拥…

新手网站建设咸阳做网站托管

前言 对于分析型数据库产品,通过增加服务节点实现集群水平扩容,并提升集群性能和容量,是运维的必要手段。 但是对于熟悉 ClickHouse 的工程师而言,听到“扩容”二字一定会头疼不已。开源 ClickHouse 的 MPP 架构导致扩容成本高&…

个人网站用wordpress吗网站页头页尾怎么做浏览器缓冲设置

php用GD库给图片添加文字水印,整个代码比较简单,DEMO如下:/*打开图片*///1、配置图片路径$src "aeroplane.jpg";//2、获取图片信息$info getimagesize($src);//3、获取图片类型$type image_type_to_extension($info[2], false);…