You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何实现单次查找的默认Map行为?

Kotlin MutableMap withDefault 不生效与单次查找实现方案

问题原因

withDefault 只是为Map提供了默认值的返回逻辑:当调用getValue找不到对应键时,会返回你指定的默认值,但不会自动将这个默认值存入原Map。所以你执行m.getValue(1).add(2)时,虽然得到了新的MutableList并添加了元素,但这个列表并没有被存入Map,后续查询m[1]仍然是null,这就是你觉得“无法生效”的核心原因。

单次查找的最优实现

Kotlin的MutableMap内置了getOrPut方法,专门解决这类“查找不存在则创建并存入”的场景,且仅会执行一次查找操作,完全符合性能要求:

val m = mutableMapOf<Int, MutableList<Int>>()
m.getOrPut(1) { mutableListOf() }.add(2)

逻辑说明

  • 当键1存在时:直接返回对应的MutableList,调用add(2)修改该列表
  • 当键1不存在时:执行Lambda表达式创建空MutableList,将其存入Map中,再返回这个列表,随后执行add(2)

对比两次查找的写法

你之前的两次查找写法需要执行两次Map查询(m[1] == null一次,else分支里的m[1]又是一次),而getOrPut只做一次查找,性能更优,代码也更简洁。

内容的提问来源于stack exchange,提问作者Felix Dombek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 20:50:59