尝试使用优先级队列而不了解比较器

时间:2012-03-21 13:18:30

标签: java priority-queue

编辑:我添加了我创建类Process的新实例作为p。 编辑2:从编译中添加了错误。

为模拟进程调度的类编写程序,我试图使用最初在指定的提交时间之前存储所有进程的优先级队列。我想按进程优先级在notSubmitted优先级队列中对它们进行优先级排序。我想我需要使用比较器,但我不确定,因为我之前从未使用优先级队列编程。这就是我在下面尝试做的事情。任何人都可以帮我解决什么错误以及我需要做些什么来解决它?

我有一个流程类没有在下面显示,如果你希望我在我可以添加它。

创建Process类的新实例。

    static PriorityQueue<Process> notSubmitted = new PriorityQueue<Process>(25,
             new Comparator<Process>(){
                    public int compare(Object t1, Object t2)
                    {
                            int process1Time = ((Process)t1).getsubmissionTime();
                            int process2Time = ((Process)t2).getsubmissionTime();

                            if(process1Time > process2Time)
                            {
                                    return 1;
                            }
                            else if(process1Time < process2Time)
                            {
                                    return -1;
                            }
                            else
                            {
                                    return 0;
                            }
                    }

    } );

            Process[] p = new Process[25];

这是我填充队列的地方。 (最初我有一个常规队列,一切正常,但我想更改为优先级队列,以便稍后在程序中更容易)

for(int j = 0; j < numProcesses; ++j)
            {
                    pid = i.nextInt();
                    priority = i.nextInt();
                    submissionTime = i.nextInt();
                    totalCpuTime = i.nextInt();
                    computeTime = i.nextInt();
                    ioTime = i.nextInt();
                    p[j] = new Process(pid, priority, submissionTime, totalCpuTime, computeTime, ioTime);
            }
            System.out.printf("%d  %d  %d\n",c.getcpuNum(), c.getnumProcesses(), c.getqSize());

            for(int r = 0; r < numProcesses; ++r)
            {
                    //populate the not submitted queue first
                    notSubmitted.add(p[r]);
            }

编译错误

javac prog2.java
prog2.java:84: <anonymous prog2$1> is not abstract and does not override abstract method compare(Process,Process) in java.util.Comparator
                    public int compare(Object t1, Object t2)
                               ^
1 error

1 个答案:

答案 0 :(得分:1)

您的compare方法需要两个Process个参数,而不是两个Object个。

...
public int compare(Process p1, Process p2) {
...