EYENDLESSYOUNG/ MANUAL
微信公众号微信公众号
← 返回目录02.01.04

HashMap的高级用法

部分 02 编程语言章节 Java · Java基础 04/05创建 2025-01-09更新 2026-07-31阅读 –

HashMap的高级用法 ​

1. 初始化时设置初始容量和负载因子 ​

Java
Map<String, Integer> map = new HashMap<>(64, 0.8f);
// 64 初始容量
// 0.8 负载因子(load factor)

在 HashMap 中,负载因子用于决定何时需要增加 HashMap 的容量。默认的负载因子是 0.75,也就是说,当哈希表的元素数量达到容量的 75% 时,它会自动扩容。

2. 使用compute方法动态计算值 ​

Java
Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);

map.compute("apple", (key, value) -> value == null ? 1 : value + 1);
System.out.println(map.get("apple")); // 2

3. 使用merge方法合并值 ​

Java
Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.merge("apple", 1, Integer::sum);
System.out.println(map.get("apple")); // 2

4. 使用getOrDefault方法避免空指针 ​

getOrDefault 方法可以在键不存在的时候返回默认值,避免空指针异常。

Java
Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);

int count = map.getOrDefault("banana", 0);
System.out.println(count) // 0

5. 使用putIfAbsent方法避免覆盖 ​

putIfAbsent方法只有在键不存在时才会插入值,避免覆盖已有的值。

Java
Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);

map.putIfAbsent("apple", 2);
System.out.println(map.get("apple")); // 1

6. 使用replaceAll方法批量更新值 ​

replaceAll 方法可以批量更新 HashMap 中的所有值。

Java
Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);

map.replaceAll((key, value) -> value + 2);
System.out.println(map); // {apple=2, banana=4}

7. 使用computeIfAbsent延迟计算值 ​

computeIfAbsent 方法可以在键不存在时动态计算值,并将其放入 HashMap 中。

Java
Map<String, List<String>> map = new HashMap<>();
map.computeIfAbsent("fruits", k -> new ArrayList<>()).add("apple");
System.out.println(map.get("fruits")); // [apple]