gpt4 book ai didi

java - 如何在java中实现有序但未排序的优先级队列?

转载 作者:行者123 更新时间:2023-12-01 12:11:06 25 4
gpt4 key购买 nike

我按照 here 中的示例进行操作创建 PriorityQueue 。它效果很好,我能够优先考虑我的对象。但我的问题是我的理解,Queue是先进先出。假设我创建一个 PriorityQueue并按优先级排序。我首先将一个对象添加到队列中,优先级=低且值=c。然后我将另一个对象添加到我的 PriorityQueue 中优先级设置为高,值设置为 b。最后我想添加另一个对象到 PriorityQueue也具有高优先级,但值=a。那我就poll()打印出我得到的这三个对象

priority: High, value: a
priority: High, value: b
priority: Low, value: c

优先级排序正确,但我希望具有相同优先级的两个对象遵循 FIFO 规则。由于 b 先添加在 a 之前,所以预期结果应该是

priority: High, value: b
priority: High, value: a
priority: Low, value: c

这可行吗?我的比较器如下

private static Comparator<Request> comparator = new Comparator<Request>(){
@Override
public int compare(Request r1, Request r2) {
return (int) (r1.priority - r2.priority);
}
};

谢谢!

最佳答案

你做不到。来自 PriorityQueue docs :

The head of this queue is the least element with respect to the specified ordering. If multiple elements are tied for least value, the head is one of those elements -- ties are broken arbitrarily. (emphasis added)

您可以做的是为每个Request分配一个唯一的、递增的ID,然后在比较器中使用它来打破同等优先级实例之间的联系。

关于java - 如何在java中实现有序但未排序的优先级队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27280306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com