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

关于HashMap中getOrDefault方法统计数组元素频率的疑问

解读Map.getOrDefault()在统计数组元素频率中的作用

核心逻辑拆解

freqMap.getOrDefault(currNum, 0)+1是把「获取当前数字的已有计数→计数加1→更新回Map」流程里的第一步做了简化,拆分来看:

1. Map.getOrDefault(key, defaultValue)的工作原理

这是Java 8给Map接口新增的工具方法,逻辑直白:

  • 如果当前Map中存在指定的key(这里就是遍历到的currNum),直接返回该key对应的value(也就是之前统计的该数字出现次数)
  • 如果当前Map中不存在这个key,就返回你传入的defaultValue(这里是0)

2. 结合代码场景的实际流程

在遍历数组的循环里,每次处理currNum时:

  • 用getOrDefault拿到该数字的“当前已有计数”:第一次遇到某个数字时,Map里没有它,就取默认值0;后续再遇到时,就取之前累计的次数
  • 给计数加1,代表当前数字又出现了一次
  • 最后把新的计数存回Map,完成频率更新

对比传统写法,更直观理解优势

如果不用getOrDefault,这段逻辑要写成这样:

for (int currNum : nums) {
    Integer currentCount = freqMap.get(currNum);
    // 手动判断key是否存在,不存在就设为0
    if (currentCount == null) {
        currentCount = 0;
    }
    // 计数加1后存回Map
    freqMap.put(currNum, currentCount + 1);
}

getOrDefault本质就是把上面的判断逻辑封装成了一个方法,让代码更简洁紧凑。

实际例子演示

假设数组是[1,2,1,3,2,2],遍历过程中Map的变化:

  • 处理第一个1:Map无1→getOrDefault返回0→0+1=1→Map存1:1
  • 处理第一个2:Map无2→返回0→0+1=1→Map存2:1
  • 处理第二个1:Map有1→返回1→1+1=2→Map更新1:2
  • 处理第一个3:Map无3→返回0→0+1=1→Map存3:1
  • 处理第二个2:Map有2→返回1→1+1=2→Map更新2:2
  • 处理第三个2:Map有2→返回2→2+1=3→Map更新2:3

最终Map里就准确记录了每个数字的出现频率:1出现2次,2出现3次,3出现1次。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:01:25