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

