HashMap的getOrDefault方法用于安全获取键值,键存在则返回对应值,不存在则返回指定默认值且不修改Map;其签名是V getOrDefault(Object key, V defaultValue),支持null默认值,常用于计数等场景,比手动判空更简洁安全。

HashMap 的 getOrDefault 方法用于安全获取键对应的值,如果键不存在,就返回你指定的默认值,避免空指针异常。
getOrDefault 的基本用法
方法签名:V getOrDefault(Object key, V defaultValue)
它接收两个参数:要查找的键,以及键不存在时返回的默认值(类型必须与 value 类型一致)。
- 如果 key 存在,返回对应 value;
- 如果 key 不存在,直接返回传入的 defaultValue,不会修改 map;
- defaultValue 可以是 null(当 value 类型允许 null 时),也可以是任意合法对象。
常见使用场景示例
比如统计字符串中每个字符出现次数:
Map<Character, Integer> countMap = new HashMap<>();
String s = "hello";
for (char c : s.toCharArray()) {
countMap.put(c, countMap.getOrDefault(c, 0) + 1);
}
这里 countMap.getOrDefault(c, 0) 确保第一次遇到字符 c 时不会报错,直接用 0 累加。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
和 get() + 判空对比
不用 getOrDefault 时,常这样写:
立即学习“Java免费学习笔记(深入)”;
Integer old = map.get(key); if (old == null) old = 0; map.put(key, old + 1);
而用 getOrDefault 更简洁、线程安全(仅读操作)、不易漏判 null。
注意点
- key 的 equals 和 hashCode 必须正确定义(尤其是自定义对象作 key 时);
- defaultValue 不会自动装箱或类型转换,类型不匹配会编译报错;
- 它只读不写,不会触发 put 或 compute 等副作用。

















