在Java的HashMap中,修改已有键的值应直接调用put(key, newValue),键存在时覆盖并返回旧值,不存在时插入并返回null;推荐用computeIfPresent()进行基于原值的条件更新,避免先remove再put的低效操作。

在 Java 的 HashMap 中,修改已有键对应的值非常简单:直接调用 put(key, newValue) 方法即可。如果键已存在,新值会自动覆盖旧值,并返回被替换的旧值;如果键不存在,则插入新键值对。
使用 put() 覆盖已有键的值
put() 是最常用、最直接的方式。它不区分“新增”还是“修改”,统一处理:
- 键存在 → 替换值,返回旧值
- 键不存在 → 插入新键值对,返回
null
示例:
Map<String, Integer> map = new HashMap<>();map.put("apple", 10);
Integer oldValue = map.put("apple", 25); // 返回 10,map 中 "apple" 对应值变为 25
使用 compute() 或 computeIfPresent() 进行条件更新
当需要基于原值计算新值(比如加 1、拼接字符串),推荐用 computeIfPresent(),它只在键存在时执行计算:
立即学习“Java免费学习笔记(深入)”;
-
map.computeIfPresent("apple", (k, v) -> v + 5);→ 若 "apple" 存在,值加 5 -
map.compute("apple", (k, v) -> v == null ? 1 : v + 1);→ 无论是否存在,都设为“原值+1”或默认 1
注意 put() 的返回值可用于判断键是否存在
利用 put() 返回值可避免额外调用 containsKey():
if (result == null) {
// 键原来不存在,这是新增
} else {
// result 是被替换的旧值,说明是修改
}
不推荐:先 remove 再 put
不要写成 map.remove(key); map.put(key, newValue); —— 效率低且多一次哈希查找,还可能引发并发问题(非线程安全场景下虽无竞态,但逻辑冗余)。


















