java 9 的 list.of()、set.of()、map.of() 创建轻量级不可变集合,元素不可为 null,修改操作抛 unsupportedoperationexception,map.of() 最多支持 10 对键值。

Java 9 引入了 `List.of()`、`Set.of()` 和 `Map.of()` 等静态工厂方法,用于快速创建**不可变集合**。这些方法返回的集合是轻量级、线程安全、不允许修改(如 add/remove/put)的实现。
核心特点
通过 `of` 创建的集合具有以下关键特性:
- 元素不能为空(传入 null 会直接抛出 NullPointerException)
- 集合本身不可变:调用 add、remove、clear 等修改方法会抛出 UnsupportedOperationException
- 底层实现高度优化,内存占用小,适合常量或配置类数据
- 对于 Map.of(),键必须唯一;重复键会抛出 IllegalArgumentException
基本用法示例
按类型分别创建:
-
List:
List<string> list = List.of("a", "b", "c");</string> -
Set:
Set<integer> set = Set.of(1, 2, 3);</integer> -
Map(键值对成对):
Map<string integer> map = Map.of("one", 1, "two", 2);</string>
注意:`Map.of()` 最多支持 10 个键值对(即 20 个参数)。超过需用 Map.ofEntries(Map.entry(k1,v1), ...)。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
处理空值与异常
显式传入 null 会立即失败:
-
List.of("a", null)→ 抛出 NullPointerException -
Set.of(1, null)→ 同样抛出 NullPointerException -
Map.of("k", null)→ 键或值为null均触发 NullPointerException
若需容纳 null,不能使用 `of` 方法,应改用传统方式(如 new ArrayList())并手动包装为不可变视图(如 Collections.unmodifiableList()),但后者不检查运行时修改,也不如 `of` 高效。
与旧方式对比
相比 Java 8 及之前常用的 Collections.unmodifiableXXX():
- `of` 返回的是全新不可变实现,不是对可变集合的“只读包装”,因此更安全(原始集合无法被意外修改影响它)
- `of` 集合在序列化、哈希计算等方面做了专门优化
- `Collections.unmodifiableList(new ArrayList(...))` 仍存在底层列表被篡改的风险(如果保留了原始引用)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










