推荐用 put(key, newValue) 更新值,键存在则替换并返回旧值,不存在则新增;需条件更新时用 replace;依赖旧值计算时用 compute 或 merge;避免 putIfAbsent 和先 get 再 put。

直接用 put(key, newValue) 就行。HashMap 的设计就是:键存在就更新值,键不存在就新增键值对——这是最常用、最直观的方式。
用 put 方法更新值
这是最推荐的做法,语义清晰,代码简洁,且兼容所有 JDK 版本。
- 调用
map.put("key", newValue),如果 key 已存在,原 value 被自动替换 - 返回值是被替换的旧值(可选接收),若 key 不存在则返回
null - 无需提前检查 key 是否存在,put 本身已做判断
用 replace 方法精准控制
当你希望「只在 key 存在时才更新」,或「只在旧值匹配时才更新」,replace 更安全。
-
map.replace("key", newValue):仅当 key 存在时才替换,不存在则不做任何事(不新增) -
map.replace("key", oldValue, newValue):只有当前 value 确实等于oldValue时,才更新为newValue,适合并发或条件更新场景
用 compute 或 merge 做计算式更新
当新值依赖旧值(比如自增、拼接、合并等),避免先 get 再 put 的两步操作,用函数式方法更简洁、线程更友好。
将后端 Java 接口文档转换为前端 TypeScript 类型定义(interface / type)。输入:飞书文档、Spring Boot 接口文档、Swagger/OpenAPI、手写 API 文档等。输出:包含请求参数与响应结果的 .md 文件,含完整 JSDoc 注释。触发关键词:Java 转 TS、接口转换、生成前端类型、接口文档转 TypeScript、DTO/VO/BO 转 interface、后端文档转前端类型、生成接口类型、类型定义生成。
-
map.compute("key", (k, v) -> v == null ? 0 : v + 1):安全处理 null,实现“有则加1,无则设0” -
map.merge("key", 10, Integer::sum):若 key 存在,用sum合并旧值与 10;不存在则直接设为 10
不建议的操作
别用 putIfAbsent 来改值——它只在 key 不存在时才生效,用于“首次设置”,不是更新。
也别手动先 get 再 put,既多一次查找,又在并发下可能出错(旧值已被其他线程改过)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










