关于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
相关产品推荐
相关产品推荐

