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,2,1 ではなく 3,1,2 を出力します。誰かが私がここでやっている間違いを教えてもらえますか? タスクをキューから削除またはキューに追加するたびに、キューはタスクを優先度の高い順に並べる必要があります。
お知らせ下さい。
ありがとうジョシュ