应使用 containsKey() 判断键是否存在,因为 get() == null 无法区分“键不存在”和“键存在但值为 null”两种情况;containsKey() 明确返回键是否存在于 map 中,包括值为 null 或键为 null 的情形。

用 containsKey() 方法判断,这是最直接、最安全的方式。
为什么不能用 get() == null?
因为 HashMap 允许 value 为 null。所以 map.get(key) == null 有两种可能:
- 键根本不存在(返回 null)
- 键存在,但对应值就是 null
单靠 get() 无法区分这两种情况,容易误判。
containsKey() 的基本用法
该方法接收一个 Object 类型参数(即你要查的 key),返回 boolean:
立即学习“Java免费学习笔记(深入)”;
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 返回 true:key 存在于 map 中(不管对应 value 是什么,包括 null)
- 返回 false:key 完全不在 map 里
示例:
HashMap<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", null); // value 为 null 是合法的
System.out.println(map.containsKey("a")); // true
System.out.println(map.containsKey("b")); // true(键存在!)
System.out.println(map.containsKey("c")); // false
System.out.println(map.get("b") == null); // true —— 但这不表示键不存在
注意 null 键的特殊性
HashMap 也允许 key 为 null(只有一个):
-
map.put(null, "value")是合法的 -
map.containsKey(null)可以正常判断 null 键是否存在
只要 key 本身是 null,就按 null 处理,equals 和 hashCode 规则仍适用(null.equals(null) 为 true)。
性能和底层逻辑
在 HashMap 中,containsKey() 平均时间复杂度是 O(1),因为它基于哈希定位桶,再遍历链表或红黑树做 equals 比较。只要 key 类型正确重写了 hashCode() 和 equals(),结果就可靠。

















