getordefault是java 8为map新增的安全取值方法,键存在则返回对应值(含null),不存在则返回指定默认值;它是只读操作,不修改map,适用于简单默认值场景。

getOrDefault 是 Java 8 为 Map 接口新增的便捷方法,它能安全地获取键对应的值;如果键不存在,就直接返回你指定的默认值,避免了手动判空或调用 containsKey 的冗余代码。
基本用法:替代 if-else 判空
以前写法:
String value = map.get("key");
if (value == null) {
value = "default";
}
现在一行搞定:
String value = map.getOrDefault("key", "default");
注意:这里的 "default" 只在 "key" 完全不存在(或显式存了 null)时才生效。但如果 map 允许 null 值(如 HashMap),且你存过 map.put("key", null),那么 getOrDefault("key", "default") 仍会返回 null —— 因为键存在,只是值为 null。
常用默认值类型示例
- 字符串:
map.getOrDefault("name", "未知用户") - 数字:
map.getOrDefault("age", 0)、map.getOrDefault("score", 0.0) - 集合:
map.getOrDefault("tags", Collections.emptyList())(推荐用不可变空集合,避免后续误修改) - 对象:
map.getOrDefault("config", new AppConfig())(注意:每次调用都会新建实例,如需复用建议提前创建好)
和 computeIfAbsent 的区别
getOrDefault 是只读操作,不改变 map 内容;而 computeIfAbsent 在键不存在时会执行函数并把结果存入 map:
// getOrDefault:不写入 String name = userMap.getOrDefault(userId, "游客"); // computeIfAbsent:键不存在时创建并缓存 User user = userMap.computeIfAbsent(userId, id -> fetchUserFromDB(id));
所以需要「懒加载+缓存」时选后者;仅想安全取值,用前者更轻量、语义更清晰。
实际使用小提醒
- 确保默认值类型与 map 的 value 类型兼容(编译期检查)
- 避免传入可变对象作为默认值(如 new ArrayList()),除非你明确希望每次调用都返回新实例
- 对并发场景,若用
ConcurrentHashMap,getOrDefault是线程安全的,但默认值构造逻辑本身不在同步范围内
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











