0

0

什么是Java中的List.of与Map.of_Java 9引入的快速集合初始化工厂

P粉602998670

P粉602998670

发布时间:2026-02-19 13:27:37

|

806人浏览过

|

来源于php中文网

原创

list.of 和 map.of 创建的集合不可变,修改抛 unsupportedoperationexception;map.of 限10键值对;list.of 比 arrays.aslist 更安全但语义不同;不可变集合 hashcode/equals 行为需注意。

什么是java中的list.of与map.of_java 9引入的快速集合初始化工厂

为什么 List.of 创建的集合不能增删改

因为 List.of 返回的是不可变(immutable)集合,底层不是 ArrayListLinkedList,而是一个私有静态内部实现类(如 ImmutableCollections.ListN),所有修改操作(addremoveset)都会直接抛出 UnsupportedOperationException

  • 常见错误现象:Exception in thread "main" java.lang.UnsupportedOperationException 出现在调用 list.add(...)
  • 使用场景:适合配置项、枚举常量、函数参数默认值等「写后即固定」的数据
  • 注意:哪怕只传一个 null 元素,List.of(null) 也会抛 NullPointerException —— 它在构造时就做空值校验

Map.of 最多只能建 10 个键值对?

是的。Map.of 重载方法只提供从 0 到 10 个键值对的版本(Map.of()Map.of(k1,v1)、…、Map.of(k1,v1, ..., k10,v10))。超过就得换 Map.ofEntries

  • 常见错误现象:写 Map.of(k1,v1, k2,v2, ..., k11,v11) → 编译失败,提示“no suitable method found”
  • 正确做法:用 Map.ofEntries 配合 Map.entry,例如 Map.ofEntries(Map.entry(k1,v1), Map.entry(k2,v2), ...)
  • 性能影响:两者都返回不可变 Map,但 Map.ofEntries 多一层数组封装,开销微乎其微,别为这个犹豫

Arrays.asList 比,List.of 真的更安全吗

更安全,但安全点不同。Arrays.asList 返回的是可变集合(支持 set,不支持 add/remove),且底层数组引用未隔离;List.of 彻底不可变,也不暴露内部结构。

百灵大模型
百灵大模型

蚂蚁集团自研的多模态AI大模型系列

下载
  • 典型坑:Arrays.asList(arr) 返回的 list 修改元素会同步改原数组;List.of(arr) 是把整个 arr 当作一个元素放进 list(除非你显式展开)
  • 参数差异:Arrays.asList("a", "b") 接受可变参数,但泛型推导弱;List.of("a", "b") 泛型更严格,且拒绝 null
  • 兼容性:两者都是 Java 9+ 可用,但 List.of 在 Android(API 26+)也支持,Arrays.asList 更老,但行为更易误读

什么时候不该用 Map.ofList.of

当你要后续修改、或需要保持插入顺序但又不确定 key 是否重复时,别硬套。它们不是语法糖,是语义承诺:「这数据从现在起就不该变了」。

立即学习Java免费学习笔记(深入)”;

  • 容易被忽略的点:不可变集合不重写 hashCode/equals 的逻辑缺陷——比如两个内容相同的 List.of(1,2)Arrays.asList(1,2)equals 返回 true,但它们的 hashCode 不同(因底层类不同),用在 HashSet 或作为 HashMap key 时可能出意料结果
  • 如果只是临时组装再立刻传给某个 API,且该 API 内部会拷贝或只读访问,用 List.of 没问题;但如果要反复复用、或传入旧代码(可能偷偷修改),先 new ArrayList(List.of(...)) 更稳妥

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

244

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

786

2024.03.01

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1553

2023.10.24

Java 并发编程高级实践
Java 并发编程高级实践

本专题深入讲解 Java 在高并发开发中的核心技术,涵盖线程模型、Thread 与 Runnable、Lock 与 synchronized、原子类、并发容器、线程池(Executor 框架)、阻塞队列、并发工具类(CountDownLatch、Semaphore)、以及高并发系统设计中的关键策略。通过实战案例帮助学习者全面掌握构建高性能并发应用的工程能力。

94

2025.12.01

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

77

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

36

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

67

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

46

2025.11.27

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

660

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3.7万人学习

C# 教程
C# 教程

共94课时 | 9.8万人学习

Java 教程
Java 教程

共578课时 | 68.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号