我想实现PriorityQueue。这个PriorityQueue将持有类Task的实例。 Task的这些实例应该以这样一种方式排列,即具有较高“优先级”的实例位于Queue的头部。总之,实例应该按照优先级降序排列。Java的PriorityQueue
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我期待。有人能让我知道我在这里做了什么错误吗?每次我从队列中删除或添加任务时,队列都应按优先级降序排列任务。
让我知道。
感谢 乔希
什么会出错?你说过它应该做什么,但是它在做什么? – corsiKa 2012-07-27 16:06:04
作业?或者有没有理由不使用java.util.PriorityQueue? – 2012-07-27 16:18:59
他们给我的印象是OP *为*使用java.util.PriorityQueue中,因为否则的话我们就需要看到添加的实现()(也许轮询())。如果他不是,我们需要看到更多的代码。 – 2012-07-27 16:23:49