collections.singletonmap() 是创建单键值对、线程安全且不可修改的轻量级 map 的最简洁方式,返回内部 singletonmap 实例,支持 null 键值,适用于默认值、api 响应等场景。

Collections.singletonMap() 是 Java 中创建只含一个键值对、且线程安全、不可修改的映射表(Map)最简洁的方式。它返回的是一个轻量级的不可变 Map 实例,底层不使用哈希表或红黑树,内存占用极小,适合临时场景或作为默认/占位映射使用。
基本用法:传入键和值即可
该方法是静态泛型方法,签名如下:
public static调用时直接传入键和值,类型由编译器自动推断:
Map<string integer> singleMap = Collections.singletonMap("age", 25);</string>
此时 singleMap 是一个只包含 "age" → 25 的映射,后续任何修改操作(如 put、remove、clear)都会抛出 UnsupportedOperationException。
关键特性与注意事项
- 返回的
Map是不可变的:不能添加、删除、替换键值对,也不能通过entrySet()或keySet()的迭代器修改 - 是线程安全的:因为内容固定且无状态,多个线程可安全读取
- 不是
HashMap等具体实现类,而是内部私有静态类SingletonMap,结构简单、开销低 - 键和值允许为
null(只要对应类型支持),例如:Collections.singletonMap(null, "unknown")合法 - 若需多个键值对的不可变映射,请改用
Map.of()(Java 9+)或ImmutableMap.of()(Guava)
常见适用场景
- 作为方法参数的默认值,避免传入
null或空Map,例如:processOptions(Collections.singletonMap("debug", true)) - 构建单元素响应体(如 REST API 返回简短结果):
return Collections.singletonMap("status", "success"); - 在 Stream 操作中作为中间映射,例如:
list.stream().collect(Collectors.toMap(x -> x, x -> Collections.singletonMap("type", "item"))) - 替代手动创建匿名内部类或反复 new HashMap + put 的写法,更清晰、更安全
对比其他单元素创建方式
❌ 不推荐的手动方式:
Map<string string> m = new HashMap();
m.put("name", "Alice");
m = Collections.unmodifiableMap(m); // 多余两步,且有额外对象开销</string>
✅ 推荐方式(简洁、高效、意图明确):
Map<string string> m = Collections.singletonMap("name", "Alice");</string>
它一步到位,语义清晰,且无冗余对象分配。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











