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

遍历HashMap时重复输出键?我的Java代码问题排查

问题分析与解决

代码问题所在

你代码的核心问题是打印逻辑嵌套在了数组遍历的循环内部:

  • 每处理一个数组元素,就立刻遍历整个Map并打印所有重复元素。比如当数组中第2次遇到10时,Map里10的计数变为2,此时打印10;第3次遇到10时,计数变为3,又会再打印一次10;最后遇到第2个45时,打印45。这就导致同一个重复元素被多次输出,出现了10 10 10 45的结果。
  • 你对HashMap键覆盖的理解是正确的——重复的键确实会覆盖原有键值对,但这里的问题和键覆盖无关,纯粹是打印时机不对。

修正后的代码

把统计逻辑和打印逻辑分开,先完成所有元素的次数统计,再一次性输出所有重复元素:

public static void repeatingElements(int a[], int n) {
    HashMap<Integer, Integer> map = new HashMap<>();
    // 先统计所有元素的出现次数
    for (int num : a) {
        // 用getOrDefault简化计数逻辑,无需手动判断是否存在键
        map.put(num, map.getOrDefault(num, 0) + 1);
    }
    // 遍历Map,只输出出现次数大于1的元素
    for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
        if (entry.getValue() > 1) {
            System.out.print(entry.getKey() + " ");
        }
    }
}

效果验证

输入{12, 10, 9, 45, 2, 10, 10, 45}时,会先统计出10出现3次、45出现2次,其他元素出现1次,最后一次性输出10 45,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 07:14:55