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

如何在嵌套PriorityQueue的ArrayList构造中实现Comparator?

问题分析与解决方案

你的错误在于把用于PriorityQueue的排序逻辑传给了ArrayList的构造函数——ArrayList作为动态数组本身没有内置排序规则,也不接受这类Comparator参数。排序逻辑应该定义在每个PriorityQueue的初始化过程中,因为是每个优先级队列需要按指定规则排序。

正确实现代码

基础实现

先初始化ArrayList,再逐个添加带有指定Comparator的PriorityQueue:

// 初始化空的ArrayList
ArrayList<PriorityQueue<Integer[]>> p = new ArrayList<>();

// 向ArrayList中添加按数组第三个元素(索引2)排序的PriorityQueue
p.add(new PriorityQueue<>((o1, o2) -> o1[2] - o2[2]));

批量创建多个队列

如果需要创建多个符合要求的PriorityQueue,可以用循环批量添加:

ArrayList<PriorityQueue<Integer[]>> p = new ArrayList<>();
int queueNum = 3; // 要创建的队列数量

for (int i = 0; i < queueNum; i++) {
    // 每个队列都使用相同的排序规则:按Integer[]索引2的元素升序排序
    PriorityQueue<Integer[]> queue = new PriorityQueue<>((o1, o2) -> o1[2] - o2[2]);
    p.add(queue);
}

可选:空值安全的Comparator

如果需要避免数组为空、长度不足或元素为空的异常,可以扩展Comparator逻辑:

p.add(new PriorityQueue<>((o1, o2) -> {
    if (o1 == null || o2 == null) {
        // 自定义空值处理,比如把空数组放在队列末尾
        return o1 == null ? 1 : -1;
    }
    // 避免数组长度不足导致的索引越界
    if (o1.length <= 2 || o2.length <= 2) {
        // 自定义短数组的排序规则,比如按数组长度升序
        return Integer.compare(o1.length, o2.length);
    }
    return o1[2] - o2[2];
}));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:57:06