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

为何Java中用int[]初始化PriorityQueue可编译?疑违反泛型限制

泛型中使用int[]为何能正常编译?

你提到的这段代码里,PriorityQueue<int[]>并没有违反Java泛型不能用基本类型的限制,原因很简单:int[]不是基本数据类型,而是数组引用类型。

先看你给出的代码:

public int[] topKFrequent(int[] nums, int k) {
    PriorityQueue<int[]> priorityQueue = new PriorityQueue<>(
            (a, b) -> a[1] == b[1] ? b[0] - a[0] : b[1] - a[1]);
    int[] arr = new int[20001];
    for (int num : nums) arr[num + 10000]++;

    for (int i = 0; i < 20001; i++)
        if (arr[i] != 0) priorityQueue.add(new int[]{i - 10000, arr[i]});
    int length = Math.min(priorityQueue.size(), k);
    int[] result = new int[length];
    for (int i = 0; i < length; i++) result[i] = priorityQueue.poll()[0];
    return result;
}

Java泛型禁止的是用基本数据类型(比如int、char、boolean这类)直接实例化泛型类,比如你写PriorityQueue<int>才会编译报错。但数组不一样:不管数组里存的是基本类型还是引用类型,数组本身都是Object的子类,属于引用类型范畴。int[]本质上是一个指向int数组对象的引用,完全符合泛型对类型参数必须是引用类型的要求,所以这段代码在Java 8(以及所有支持泛型的Java版本)里都能正常编译运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:26:06