You need to enable JavaScript to run this app. Java自定义类作为PriorityQueue元素排序结果不符合预期如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Java自定义类作为PriorityQueue元素排序结果不符合预期如何解决

问题解答

根因分析

你遇到的问题核心是 Java 的 PriorityQueue 迭代器不保证按优先级顺序输出元素。
PriorityQueue 底层基于堆结构实现,仅保证每次调用 poll()、peek() 方法时取出的是当前队列优先级最高的元素。直接使用增强 for 循环遍历队列时,输出的是堆结构底层存储的物理顺序,和你定义的排序规则无关。

修复方法

你只需要把代码末尾遍历打印的逻辑,从增强for循环改为循环调用poll()取出元素即可,你的比较器逻辑(按收入降序,收入相同时按日期降序)和预期输出规则匹配,不需要修改:

// 替换原有的for (Schedule s : pq) 遍历代码
while (!pq.isEmpty()) {
    Schedule s = pq.poll();
    System.out.println("income:" + s.income + " " + "time: " + s.date);
}

修改后输出的顺序就和你预期的完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 10:06:02