Java 中 HashMap 所有常用方法的示例代码和每个方法对应的输出 解释。

Java HashMap 常用方法详解

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


1. clear()

清空 HashMap 中所有键值对。

Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.clear();
System.out.println(map);  // 输出:{}

2. clone()

复制一份 HashMap。

Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
Map<String, Integer> cloned = (HashMap<String, Integer>) ((HashMap<String, Integer>) map).clone();
System.out.println(cloned);  // 输出:{A=1}

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

我创建了一个 Map<String, Integer> 接口类型的变量:

Map<String, Integer> 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<String, Integer> cloned = (HashMap<String, Integer>) ((HashMap<String, Integer>) map).clone();

这段代码做了两件事:

先把 map 强制转换为 HashMap:

(HashMap<String, Integer>) map

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

((HashMap<String, Integer>) map).clone();

再把返回的 Object 强转回 HashMap<String, Integer> 类型:
因为 clone() 的返回类型是 Object,所以要再转一次类型。


3. isEmpty()

判断是否为空。

Map<String, Integer> map = new HashMap<>();
System.out.println(map.isEmpty());  // 输出:true

4. size()

返回键值对个数。

Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
System.out.println(map.size());  // 输出:2

5. put()

插入键值对。

Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
System.out.println(map);  // 输出:{A=1}

6. putAll()

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

Map<String, Integer> map1 = new HashMap<>();
map1.put("A", 1);
Map<String, Integer> map2 = new HashMap<>();
map2.put("B", 2);
map1.putAll(map2);
System.out.println(map1);  // 输出:{A=1, B=2}

7. putIfAbsent()

不存在时才添加。

Map<String, Integer> 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<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.remove("A");
System.out.println(map);  // 输出:{}

9. containsKey()

判断是否存在指定 key。

Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
System.out.println(map.containsKey("A"));  // 输出:true

10. containsValue()

判断是否存在指定 value。

Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
System.out.println(map.containsValue(1));  // 输出:true

11. replace()

替换已有 key 的值。

Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.replace("A", 100);
System.out.println(map);  // 输出:{A=100}

12. replaceAll()

统一替换所有键值。

Map<String, Integer> 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<String, Integer> map = new HashMap<>();
map.put("A", 1);
System.out.println(map.get("A"));  // 输出:1

14. getOrDefault()

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

Map<String, Integer> map = new HashMap<>();
System.out.println(map.getOrDefault("A", -1));  // 输出:-1

15. forEach()

遍历 HashMap。

Map<String, Integer> 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<String, Integer> map = new HashMap<>();
map.put("A", 1);
for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + ":" + entry.getValue());
}
// 输出:A:1

17. keySet()

获取所有 key。

Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
System.out.println(map.keySet());  // 输出:[A]

18. values()

获取所有 value。

Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
System.out.println(map.values());  // 输出:[1]

19. merge()

合并值逻辑处理。

Map<String, String> 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<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.compute("A", (k, v) -> v + 10);
System.out.println(map);  // 输出:{A=11}

21. computeIfAbsent()

key 不存在才计算并插入。

Map<String, Integer> map = new HashMap<>();
map.computeIfAbsent("A", k -> 100);
System.out.println(map);  // 输出:{A=100}

22. computeIfPresent()

key 存在时计算并替换值。

Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.computeIfPresent("A", (k, v) -> v + 5);
System.out.println(map);  // 输出:{A=6}
posted @ 2025-08-02 16:06  AlphaGeek  阅读(402)  评论(0)    收藏  举报