Java HashMap 常用方法详解
本文整理了 Java 中 HashMap 的常用方法,每个方法均包含代码示例和输出结果,方便理解和记忆。
1. clear()
清空 HashMap 中所有键值对。
Map
map.put("A", 1);
map.clear();
System.out.println(map); // 输出:{}
2. clone()
复制一份 HashMap。
Map
map.put("A", 1);
Map
System.out.println(cloned); // 输出:{A=1}
✅ 问题:怎么理解上述代码的写法?
我创建了一个 Map
Map
虽然 map 实际上是一个 HashMap,但由于声明时使用的是 Map 接口,它只能访问 Map 接口中定义的方法,而不能直接调用 HashMap 特有的方法,如 .clone()。
💡 clone() 方法是 HashMap 独有的
clone() 是 HashMap 中定义的方法,不在 Map 接口中:
public Object clone()
所以你不能直接对 map 调用 .clone():
map.clone(); // ❌ 错误,Map 接口没有 clone 方法
✅ 正确做法:强制类型转换
因为 map 实际是一个 HashMap 实例,你可以这样做:
HashMap
这段代码做了两件事:
先把 map 强制转换为 HashMap:
(HashMap
调用 .clone() 方法,返回一个新的 HashMap 对象:
((HashMap
再把返回的 Object 强转回 HashMap
因为 clone() 的返回类型是 Object,所以要再转一次类型。
3. isEmpty()
判断是否为空。
Map
System.out.println(map.isEmpty()); // 输出:true
4. size()
返回键值对个数。
Map
map.put("A", 1);
map.put("B", 2);
System.out.println(map.size()); // 输出:2
5. put()
插入键值对。
Map
map.put("A", 1);
System.out.println(map); // 输出:{A=1}
6. putAll()
插入另一个 map 的所有键值对。
Map
map1.put("A", 1);
Map
map2.put("B", 2);
map1.putAll(map2);
System.out.println(map1); // 输出:{A=1, B=2}
7. putIfAbsent()
不存在时才添加。
Map
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.put("A", 1);
map.remove("A");
System.out.println(map); // 输出:{}
9. containsKey()
判断是否存在指定 key。
Map
map.put("A", 1);
System.out.println(map.containsKey("A")); // 输出:true
10. containsValue()
判断是否存在指定 value。
Map
map.put("A", 1);
System.out.println(map.containsValue(1)); // 输出:true
11. replace()
替换已有 key 的值。
Map
map.put("A", 1);
map.replace("A", 100);
System.out.println(map); // 输出:{A=100}
12. replaceAll()
统一替换所有键值。
Map
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.put("A", 1);
System.out.println(map.get("A")); // 输出:1
14. getOrDefault()
获取指定 key 的值,如果不存在返回默认值。
Map
System.out.println(map.getOrDefault("A", -1)); // 输出:-1
15. forEach()
遍历 HashMap。
Map
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.put("A", 1);
for (Map.Entry
System.out.println(entry.getKey() + ":" + entry.getValue());
}
// 输出:A:1
17. keySet()
获取所有 key。
Map
map.put("A", 1);
System.out.println(map.keySet()); // 输出:[A]
18. values()
获取所有 value。
Map
map.put("A", 1);
System.out.println(map.values()); // 输出:[1]
19. merge()
合并值逻辑处理。
Map
map.put("A", "Hello");
map.merge("A", "World", (oldVal, newVal) -> oldVal + " " + newVal);
System.out.println(map); // 输出:{A=Hello World}
20. compute()
指定 key 重新计算值。
Map
map.put("A", 1);
map.compute("A", (k, v) -> v + 10);
System.out.println(map); // 输出:{A=11}
21. computeIfAbsent()
key 不存在才计算并插入。
Map
map.computeIfAbsent("A", k -> 100);
System.out.println(map); // 输出:{A=100}
22. computeIfPresent()
key 存在时计算并替换值。
Map
map.put("A", 1);
map.computeIfPresent("A", (k, v) -> v + 5);
System.out.println(map); // 输出:{A=6}