Java Map 的 `computeIfAbsent` 和 `getOrDefault` 方法详解

在 Java 开发中,Map 接口提供了许多实用的方法来简化代码,提高效率。本文将介绍两个常用的方法:computeIfAbsentgetOrDefault,并通过示例说明它们的使用场景和功能。

1. computeIfAbsent 方法

1.1 方法作用

computeIfAbsent 方法用于检查指定的键是否存在于映射中:

  • 如果键存在:返回当前与之关联的值,不进行任何修改。
  • 如果键不存在:使用提供的映射函数计算一个新值,将该值与键一起添加到映射中,并返回新值。

1.2 方法签名

V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction);
  • key:要检查的键。
  • mappingFunction:用于计算新值的函数,如果键不存在时调用。

1.3 使用示例

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ComputeIfAbsentExample {
    public static void main(String[] args) {
        Map<String, List<String>> map = new HashMap<>();
        String key = "fruits";
        String str = "apple";

        // 使用 computeIfAbsent 方法
        map.computeIfAbsent(key, k -> new ArrayList<>()).add(str);

        System.out.println(map.get(key)); // 输出: [apple]
    }
}

在上述示例中:

  • 如果 map 中不存在 "fruits" 键,computeIfAbsent 会使用 k -> new ArrayList<>() 创建一个新的 ArrayList 并将其与 "fruits" 键一起添加到 map 中。
  • 然后,add(str)"apple" 添加到该列表中。

输出:

[apple]

1.4 注意事项

  • 如果 mappingFunction 返回 null,则不会将键值对添加到映射中。
  • 在计算过程中,不允许修改映射,否则会抛出 ConcurrentModificationException

2. getOrDefault 方法

2.1 方法作用

getOrDefault 方法用于获取指定键对应的值:

  • 如果键存在:返回与之关联的值。
  • 如果键不存在:返回提供的默认值。

2.2 方法签名

V getOrDefault(Object key, V defaultValue);
  • key:要查找的键。
  • defaultValue:如果键不存在时返回的默认值。

2.3 使用示例

import java.util.HashMap;
import java.util.Map;

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

        // 使用 getOrDefault 方法
        int appleCount = map.getOrDefault("apple", 0);   // 返回 1
        int orangeCount = map.getOrDefault("orange", 0); // 返回 0,因为 "orange" 不存在

        System.out.println("Apple count: " + appleCount);
        System.out.println("Orange count: " + orangeCount);
    }
}

在上述示例中:

  • map.getOrDefault("apple", 0) 返回 1,因为 "apple" 键存在。
  • map.getOrDefault("orange", 0) 返回 0,因为 "orange" 键不存在。

输出:

Apple count: 1
Orange count: 0

2.4 注意事项

  • 如果映射中存在键对应的值为 null,则 getOrDefault 会返回 null,而非默认值。
  • 使用 getOrDefault 可以避免显式的 null 检查,使代码更加简洁。

参考资料

  • Java HashMap computeIfAbsent() 方法
  • Java HashMap getOrDefault() 方法

通过理解和使用 computeIfAbsentgetOrDefault 方法,您可以在处理 Map 时编写更简洁、高效的代码。

你可能感兴趣的:(java,开发语言)