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

