最常用方法是调用 remove(key),根据键查找并删除对应键值对,存在则返回被删值,否则返回 null,平均时间复杂度 O(1);需确保 key 的 equals() 和 hashCode() 正确实现。

Java 中 HashMap 删除指定键值对,最常用、最直接的方法是调用 remove() 方法,传入要删除的键(key)即可。
使用 remove(key) 删除指定键值对
HashMap 的 remove(Object key) 方法会根据键查找并删除对应的键值对。如果键存在,返回被删除的值;如果不存在,返回 null。
- 该操作时间复杂度平均为 O(1),底层通过哈希定位桶位置,再遍历链表或红黑树完成删除
- 注意:key 的 equals() 和 hashCode() 方法必须正确实现(尤其是自定义对象作 key 时)
- 示例:
HashMap<String, Integer> map = new HashMap<>();
map.put("apple", 10);
map.put("banana", 20);
map.remove("apple"); // 删除键为 "apple" 的条目,返回 10
System.out.println(map); // {banana=20}
安全删除:先判断再 remove(避免误删或空指针)
如果不确定 key 是否存在,或者想在删除前做逻辑判断,可以配合 containsKey() 使用:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 适用于需要“删除前校验”或“删除后做额外处理”的场景
- 例如:只在值满足某条件时才删除
if (map.containsKey("banana") && map.get("banana") > 15) {
map.remove("banana");
}
批量删除:根据条件过滤删除(Java 8+)
若需按值、或更复杂的条件批量删除,可使用 removeIf()(需转为 entrySet 视图):
立即学习“Java免费学习笔记(深入)”;
- 注意:不能直接对 HashMap 调用 removeIf,但可对其 entrySet() 调用
- entrySet().removeIf(predicate) 是线程不安全的,仅适用于单线程环境
// 删除所有 value 小于 15 的键值对 map.entrySet().removeIf(entry -> entry.getValue() < 15);
其他注意事项
- remove(key, value) 是重载方法:只有当 key 存在且对应 value 也相等时才删除(可用于防止误删)
- 多线程环境下,HashMap 不是线程安全的,删除操作可能引发 ConcurrentModificationException 或数据丢失;应改用 ConcurrentHashMap 或加锁
- 删除 null 键?HashMap 允许一个 null 键,
map.remove(null)可正常删除它

















