在Java集合框架中,Map是常用的存储键值对的数据结构,日常开发中经常需要从Map中获取指定键对应的值,若键不存在或对应的值为null,通常需要编写额外的空检查逻辑,避免后续处理出现空指针异常。Java 8为Map接口新增的getOrDefault方法,能够很好地解决这类问题,让代码更加简洁。

传统获取Map值的空检查写法
在没有使用getOrDefault方法之前,我们获取Map中指定键的值时,通常需要先判断键是否存在,或者判断获取到的值是否为null,示例代码如下:
import java.util.HashMap;
import java.util.Map;
public class MapTraditionalDemo {
public static void main(String[] args) {
Map<String, Integer> scoreMap = new HashMap<>();
scoreMap.put("语文", 90);
scoreMap.put("数学", 85);
// 传统写法1:先判断键是否存在
Integer chineseScore;
if (scoreMap.containsKey("语文")) {
chineseScore = scoreMap.get("语文");
} else {
chineseScore = 0;
}
System.out.println("语文成绩:" + chineseScore);
// 传统写法2:判断获取到的值是否为null
Integer englishScore = scoreMap.get("英语");
if (englishScore == null) {
englishScore = 0;
}
System.out.println("英语成绩:" + englishScore);
}
}
上述两种传统写法都需要编写额外的条件判断逻辑,当获取值的场景较多时,会产生大量重复的空检查代码,降低代码的可读性。
getOrDefault方法的基本使用
Map的getOrDefault方法的定义如下:
default V getOrDefault(Object key, V defaultValue) {
V v;
return (((v = get(key)) != null) || containsKey(key)) ? v : defaultValue;
}
该方法接收两个参数,第一个是要查询的键,第二个是当键不存在或者对应的值为null时返回的默认值。使用该方法改写上面的示例,代码如下:
import java.util.HashMap;
import java.util.Map;
public class MapGetOrDefaultDemo {
public static void main(String[] args) {
Map<String, Integer> scoreMap = new HashMap<>();
scoreMap.put("语文", 90);
scoreMap.put("数学", 85);
// 使用getOrDefault获取值,不存在则返回默认值0
Integer chineseScore = scoreMap.getOrDefault("语文", 0);
Integer englishScore = scoreMap.getOrDefault("英语", 0);
System.out.println("语文成绩:" + chineseScore);
System.out.println("英语成绩:" + englishScore);
}
}
可以看到,原本需要多行条件判断的逻辑,现在只需要一行代码就能完成,代码简洁度大幅提升。
getOrDefault的适用场景
getOrDefault方法适合以下场景使用:
- 需要为不存在的键设置统一的默认值,比如统计词频时,初始次数设为0
- 获取配置项时,若配置不存在则使用默认配置值
- 从缓存Map中获取数据,不存在时返回默认的空对象,避免后续空指针判断
以下是一个统计词频的示例,展示getOrDefault的实用场景:
import java.util.HashMap;
import java.util.Map;
public class WordCountDemo {
public static void main(String[] args) {
String text = "java python java c++ python java";
String[] words = text.split(" ");
Map<String, Integer> wordCountMap = new HashMap<>();
for (String word : words) {
// 若词不存在,默认次数为0,再加1;若存在则直接加1
wordCountMap.put(word, wordCountMap.getOrDefault(word, 0) + 1);
}
System.out.println("词频统计结果:" + wordCountMap);
}
}
注意事项
使用getOrDefault方法时需要注意以下几点:
- 默认值类型需要和Map的值类型匹配,比如值类型是
Integer,默认值也需要是Integer类型 - 如果Map中存储的null值是合法的业务值,那么getOrDefault方法会把null当成不存在的情况返回默认值,这种场景下需要额外判断
- getOrDefault是Java 8新增的默认方法,若项目使用的Java版本低于8,则无法使用该特性
通过合理使用Map的getOrDefault方法,可以有效减少重复的空检查代码,让业务逻辑更加聚焦,提升代码的整洁度和可维护性,是Java开发中非常实用的小技巧。
JavaMapgetOrDefault空检查修改时间:2026-06-26 08:36:14