Java8 map.getOrDefault()你真的了解吗

Java8引入了Map的getOrDefault()方法,用于在尝试访问不存在的键时提供默认值,避免空指针异常。这个方法接受键和默认值作为参数,如果键存在则返回其值,否则返回默认值。文章通过示例展示了如何使用此方法编写更健壮的代码,特别是在处理单词计数等场景时。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。

map.getOrDefault()方法

在Java编程中,Map是一种非常常用的数据结构。Map通常用于存储键值对,其中每个键映射到一个值。当我们尝试访问一个不存在的键时,Map会返回null值。这在某些情况下可能会导致错误,因此Java 8引入了一个新的方法getOrDefault(),该方法可用于解决这个问题。

getOrDefault()方法的语法如下:

该方法接受两个参数:要查找的键和默认值。如果键存在,则返回与该键关联的值,否则返回指定的默认值。

default V getOrDefault(Object key, V defaultValue) {
        V v;
        return (((v = get(key)) != null) || containsKey(key))
            ? v
            : defaultValue;
    }

当使用Map集合时,如果我们尝试访问一个不存在的键,则会返回一个null值,这在某些情况下可能会导致错误。使用Map的getOrDefault()方法可以解决这个问题。

上代码:当我们需要获取某个对象的值进行一些操作,如果map的value值为空,就会抛出空指针异常,空指针异常在开发中有时候很恼火。

class Demo {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("1", 10);
        map.put("2",20);

        // 如果获取一个不存在的key会怎样?
        Integer str = map.get(3);
        // 空对象的引用方法会抛出 NullPointerException
        str.equals("str");
    }
}

结果如下:

在这里插入图片描述

使用getOrDefault()方法

class Demo {
    public static void main(String[] args) {
        // 创建一个Map对象
        Map<String, Integer> map = new HashMap<>();

        // 添加键值对到Map中
        map.put("高启强", 1);
        map.put("高启盛", 2);
        map.put("歪驴子", 3);

        // 获取键为"高启强"的值
        int count1 = map.getOrDefault("高启强", 0);
        System.out.println("Count1: " + count1);

        // 获取键为"老默"的值
        int count2 = map.getOrDefault("老默", 0);
        System.out.println("Count2: " + count2);
    }

}

结果如下:
在这里插入图片描述
在上面的示例中,我们首先创建一个Map对象,并向该Map中添加三个键值对。然后,我们使用getOrDefault()方法检索键为"高启强"和"老默"的值。由于"高启强"存在于Map中,因此返回值为1,而"老默" 不存在于Map中,因此返回默认值0。

使用场景

getOrDefault()方法通常用于编写更健壮的代码,以避免空指针异常。例如,假设我们有一个存储单词计数的Map,我们可以使用getOrDefault()方法来计算单词出现的次数,如下所示:

class Demo {
    public static void main(String[] args) {
        // 创建一个Map对象
        Map<String, Integer> wordCount = new HashMap<>();

        // 定义一句话
        String sentence = "welcome to java and welcome to here";

        // 将句子拆分成单词
        String[] words = sentence.split(" ");

        // 统计每个单词出现的次数
        for (String word : words) {
            int count = wordCount.getOrDefault(word, 0);
            wordCount.put(word, count + 1);
        }

        // 输出每个单词出现的次数
        for (Map.Entry<String, Integer> entry : wordCount.entrySet()) {
            System.out.println(entry.getKey() + " : " + entry.getValue());
        }
    }

}

结果如下:

在这里插入图片描述

在上面的示例中,我们创建了一个空的HashMap来存储单词计数。然后,我们定义了一个包含单词的句子,并使用split()方法将句子拆分成单词数组。接下来,我们使用for循环遍历单词数组,并使用getOrDefault()方法获取每个单词的计数。如果Map中不存在该单词,则默认计数为0。最后,我们使用put()方法将更新的计数存储回Map中。最后,我们遍历Map,输出每个单词及其出现次数。

最后

Map.getOrDefault()方法是一种非常有用的方法,它可以让我们更方便地处理Map中不存在的键。它通常用于编写更健壮的代码,以避免空指针异常。在使用该方法时,请注意defaultValue参数的类型必须与Map中值的类型兼容,否则会导致编译时错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是三叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值