查key用containsKey(),平均O(1)哈希查找,支持null键;查value用containsValue(),O(n)遍历比较,支持null值但较慢;二者均为安全只读操作,勿替代get()取值。

直接用 containsKey() 和 containsValue() 两个方法就行,它们是 HashMap 自带的判断工具,简单、高效、语义清晰。
判断 Key 是否存在:用 containsKey()
这个方法专门用来查某个键(key)在不在 Map 里。它内部基于哈希查找,平均时间复杂度是 O(1),非常快。
- 参数是任意 Object 类型,但实际比较时会调用 key 的
equals()方法 - 支持 null 键:如果 map 中存了
put(null, "value"),那么containsKey(null)返回 true - 注意:key 的类型要和 put 时一致,否则 equals 可能返回 false(比如 String 和 Integer 比较)
判断 Value 是否存在:用 containsValue()
这个方法用来检查某个值(value)是否作为 value 出现在 map 中。它需要遍历所有 entry,时间复杂度是 O(n),比 containsKey() 慢。
在调试 Java 后端 API 故障时使用此技能,尤其适用于以下任务:分析日志、跨 Controller、Service 和 Mapper 层追踪请求、定位异常根因、检查 SQL 执行或参数流转,以及生成简洁的诊断结论与修复方案。
- 同样用
equals()判断相等,不是 == - 支持 null 值:如果存过
put("k", null),containsValue(null)就返回 true - 值可以重复,但方法只要找到一个匹配就返回 true,不关心有几个
使用时的小提醒
这两个方法都返回 boolean,适合写 if 判断;不要拿它们代替 get() 来取值——想取值还是用 get(key),更安全也更高效。
- 避免先 containsKey 再 get:这属于两次查找,可直接用
get(key) != null(但注意 value 本身可能是 null,所以更稳妥的是用getOrDefault(key, sentinel) != sentinel) - containsValue 在大数据量时慎用,尤其在性能敏感场景
- 两者都不改变原 map,是纯读操作
一句话总结
查 key 就用 containsKey(key),查 value 就用 containsValue(value),一个快一个慢,用途分明,别混用也别绕路。










