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

LeetCode前K高频元素题中Map.Entry getValue返回Object报错问题

问题:为何Map.Entry.getValue()被提示返回Object而非Integer?

我在解决LeetCode的「前K个高频元素」问题时,尝试用PriorityQueue存储Map.Entry<Integer, Integer>类型数据,编写了如下代码:

class Solution {
    public int[] topKFrequent(int[] nums, int k) {

        HashMap<Integer, Integer> countMap = new HashMap<Integer, Integer>();

        for (int num : nums) {
            countMap.put(num, countMap.getOrDefault(num, 0) + 1);
        }

        PriorityQueue<Map.Entry<Integer, Integer>> pq = new PriorityQueue<Map.Entry<Integer, Integer>>(k, (Map.Entry e1, Map.Entry e2) -> {
            Integer e1Val = e1.getValue();
            Integer e2Val = e2.getValue();
            return e1Val - e2Val;
        });

        for (var entry : countMap.entrySet()) {
            pq.add(entry);
        }

        return null;
        
    }
}

运行时出现如下错误:

Line 15: error: incompatible types: Object cannot be converted to Integer
            Integer e1Val = e1.getValue();
                                       ^
Line 16: error: incompatible types: Object cannot be converted to Integer
            Integer e2Val = e2.getValue();
                                       ^
2 errors

明明Map.Entry<Integer, Integer>的getValue()应该返回Integer,为何会提示返回Object?


原因及解决方法

问题出在Lambda表达式里的Map.Entry没有指定泛型类型,你写的(Map.Entry e1, Map.Entry e2)是原始类型,而非参数化的Map.Entry<Integer, Integer>。

在Java中,原始类型会丢失泛型信息,编译器无法识别getValue()的返回类型是Integer,只会认为返回的是Object类型,自然无法直接赋值给Integer变量,从而触发类型转换错误。

解决办法

有两种简单的修正方式:

  1. 给Lambda里的Map.Entry加上泛型参数:
PriorityQueue<Map.Entry<Integer, Integer>> pq = new PriorityQueue<>(k, (Map.Entry<Integer, Integer> e1, Map.Entry<Integer, Integer> e2) -> {
    Integer e1Val = e1.getValue();
    Integer e2Val = e2.getValue();
    return e1Val - e2Val;
});
  1. 利用Java的类型推断,直接省略显式类型声明(编译器会根据PriorityQueue的泛型自动推断参数类型):
PriorityQueue<Map.Entry<Integer, Integer>> pq = new PriorityQueue<>(k, (e1, e2) -> {
    Integer e1Val = e1.getValue();
    Integer e2Val = e2.getValue();
    return e1Val - e2Val;
});

另外补充:当前代码最后返回null,还未完成核心逻辑,后续需要从PriorityQueue中取出前k个元素,组装成int数组返回。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:38:24