Java HashMap 常用方法详解

本文整理了 Java 中 HashMap 的常用方法,每个方法均包含代码示例和输出结果,方便理解和记忆。

1. clear()

清空 HashMap 中所有键值对。

Map map = new HashMap<>();

map.put("A", 1);

map.clear();

System.out.println(map); // 输出:{}

2. clone()

复制一份 HashMap。

Map map = new HashMap<>();

map.put("A", 1);

Map cloned = (HashMap) ((HashMap) map).clone();

System.out.println(cloned); // 输出:{A=1}

✅ 问题:怎么理解上述代码的写法?

我创建了一个 Map 接口类型的变量:

Map map = new HashMap<>();

虽然 map 实际上是一个 HashMap,但由于声明时使用的是 Map 接口,它只能访问 Map 接口中定义的方法,而不能直接调用 HashMap 特有的方法,如 .clone()。

💡 clone() 方法是 HashMap 独有的

clone() 是 HashMap 中定义的方法,不在 Map 接口中:

public Object clone()

所以你不能直接对 map 调用 .clone():

map.clone(); // ❌ 错误,Map 接口没有 clone 方法

✅ 正确做法:强制类型转换

因为 map 实际是一个 HashMap 实例,你可以这样做:

HashMap cloned = (HashMap) ((HashMap) map).clone();

这段代码做了两件事:

先把 map 强制转换为 HashMap:

(HashMap) map

调用 .clone() 方法,返回一个新的 HashMap 对象:

((HashMap) map).clone();

再把返回的 Object 强转回 HashMap 类型:

因为 clone() 的返回类型是 Object,所以要再转一次类型。

3. isEmpty()

判断是否为空。

Map map = new HashMap<>();

System.out.println(map.isEmpty()); // 输出:true

4. size()

返回键值对个数。

Map map = new HashMap<>();

map.put("A", 1);

map.put("B", 2);

System.out.println(map.size()); // 输出:2

5. put()

插入键值对。

Map map = new HashMap<>();

map.put("A", 1);

System.out.println(map); // 输出:{A=1}

6. putAll()

插入另一个 map 的所有键值对。

Map map1 = new HashMap<>();

map1.put("A", 1);

Map map2 = new HashMap<>();

map2.put("B", 2);

map1.putAll(map2);

System.out.println(map1); // 输出:{A=1, B=2}

7. putIfAbsent()

不存在时才添加。

Map map = new HashMap<>();

map.put("A", 1);

map.putIfAbsent("A", 100);

map.putIfAbsent("B", 200);

System.out.println(map); // 输出:{A=1, B=200}

8. remove()

根据 key 删除。

Map map = new HashMap<>();

map.put("A", 1);

map.remove("A");

System.out.println(map); // 输出:{}

9. containsKey()

判断是否存在指定 key。

Map map = new HashMap<>();

map.put("A", 1);

System.out.println(map.containsKey("A")); // 输出:true

10. containsValue()

判断是否存在指定 value。

Map map = new HashMap<>();

map.put("A", 1);

System.out.println(map.containsValue(1)); // 输出:true

11. replace()

替换已有 key 的值。

Map map = new HashMap<>();

map.put("A", 1);

map.replace("A", 100);

System.out.println(map); // 输出:{A=100}

12. replaceAll()

统一替换所有键值。

Map map = new HashMap<>();

map.put("A", 1);

map.put("B", 2);

map.replaceAll((k, v) -> v * 10);

System.out.println(map); // 输出:{A=10, B=20}

13. get()

获取指定 key 对应的值。

Map map = new HashMap<>();

map.put("A", 1);

System.out.println(map.get("A")); // 输出:1

14. getOrDefault()

获取指定 key 的值,如果不存在返回默认值。

Map map = new HashMap<>();

System.out.println(map.getOrDefault("A", -1)); // 输出:-1

15. forEach()

遍历 HashMap。

Map map = new HashMap<>();

map.put("A", 1);

map.put("B", 2);

map.forEach((k, v) -> System.out.println(k + "=" + v));

// 输出:

// A=1

// B=2

16. entrySet()

获取所有键值对的集合。

Map map = new HashMap<>();

map.put("A", 1);

for (Map.Entry entry : map.entrySet()) {

System.out.println(entry.getKey() + ":" + entry.getValue());

}

// 输出:A:1

17. keySet()

获取所有 key。

Map map = new HashMap<>();

map.put("A", 1);

System.out.println(map.keySet()); // 输出:[A]

18. values()

获取所有 value。

Map map = new HashMap<>();

map.put("A", 1);

System.out.println(map.values()); // 输出:[1]

19. merge()

合并值逻辑处理。

Map map = new HashMap<>();

map.put("A", "Hello");

map.merge("A", "World", (oldVal, newVal) -> oldVal + " " + newVal);

System.out.println(map); // 输出:{A=Hello World}

20. compute()

指定 key 重新计算值。

Map map = new HashMap<>();

map.put("A", 1);

map.compute("A", (k, v) -> v + 10);

System.out.println(map); // 输出:{A=11}

21. computeIfAbsent()

key 不存在才计算并插入。

Map map = new HashMap<>();

map.computeIfAbsent("A", k -> 100);

System.out.println(map); // 输出:{A=100}

22. computeIfPresent()

key 存在时计算并替换值。

Map map = new HashMap<>();

map.put("A", 1);

map.computeIfPresent("A", (k, v) -> v + 5);

System.out.println(map); // 输出:{A=6}