我正在尝试实现 PriorityQueue。这个 PriorityQueue 将保存 Task 类的实例。Task 的这些实例应该以这样一种方式排列,即具有更高“优先级”的实例位于队列的头部。简而言之,实例应该按优先级降序排列。
private static Queue<Task> testQ = new PriorityQueue<Task>(11, new TaskQueueComparator());
/*** Comparator ***/
public class TaskQueueComparator implements Comparator<Task> {
public int compare(Task task1, Task task2) {
return task2.priority - task1.priority;
}
}
/**** Task definition **/
public class Task {
public int priority;
}
/**** Code in main() ****/
Task pe11 = new Task();
pe11.priority = 3;
testQ.add(pe11);
pe11 = new Task();
pe11.priority = 1;
testQ.add(pe11);
pe11 = new Task();
pe11.priority = 2;
testQ.add(pe11);
void displayQueue() {
int size = testQ.size();
for (int k = 0; k < size; k++)
{
Task p = testQ.poll();
System.out.format("Task Priority %d \n", p.priority); // The result I am getting is 3 1 2.. I was expecting 3 2 1
}
如评论中所示,这输出 3,1,2 而不是我期望的 3,2,1。有人可以让我知道我在这里犯了什么错误吗?每次我从/到队列中删除或添加任务时,队列应按优先级降序排列任务。
让我知道。
谢谢乔什