优先使用Map.entry()静态工厂方法(Java 9+)快速创建不可变键值对;若需可变值,则选用AbstractMap.SimpleEntry。

Map.Entry 本身不能直接“构建”单条映射关系,它是一个只读(或有限可写)的视图接口,代表已存在 Map 中的某个键值对。你无法用 new Map.Entry() 创建实例——它没有公共构造方法。真正用来快速创建单条键值对并参与后续操作的,是 Map.entry() 静态工厂方法(Java 9+)。
用 Map.entry() 快速创建不可变键值对
Java 9 引入了 Map.entry(K key, V value) 静态方法,它返回一个轻量、不可变的 Map.Entry 实例。适合临时封装、测试、Stream 处理或作为函数式编程中的中间数据单元:
- 语法简洁:一行代码即可生成键值对对象,无需新建 Map 或匿名类
- 结果不可变:调用
setValue()会抛出UnsupportedOperationException,避免意外修改 - 不归属任何 Map:它是独立对象,和 HashMap、TreeMap 等无关
示例:
Map.Entry<String, Integer> entry = Map.entry("status", 200);
System.out.println(entry.getKey()); // "status"
System.out.println(entry.getValue()); // 200
// entry.setValue(404); // ❌ 运行时报错
替代方案:适用于需要可变值的场景
如果明确需要一个可修改值的单条映射(比如准备 later put 进 Map),推荐以下更直接的方式:
-
直接使用 HashMap 单元素初始化:
new HashMap() {{ put("key", "value"); }}(双大括号初始化,注意仅限测试/简单场景) -
封装为简单 record(Java 14+):
record Pair<k>(K key, V value) {}</k>,语义清晰且不可变 -
用 AbstractMap.SimpleEntry(可变):
new AbstractMap.SimpleEntry("key", "value"),支持setValue()
常见误用提醒
以下做法不符合“快速构建单条映射关系”的本意,容易引发误解或异常:
-
Map.Entry<string> e = (k,v) -> { ... };</string>—— Lambda 不能直接转为 Entry 接口 -
new HashMap.Entry()—— Entry 是接口,无 public 构造器,编译失败 - 把
entrySet().iterator().next()当作“构建”手段 —— 这是提取已有 Map 的条目,不是构建新关系
核心就一点:要快速得到一个干净、类型安全、即用即弃的键值对对象,优先用 Map.entry(key, value);若需后续修改值,选 SimpleEntry 更稳妥。

















