我正在实现一个包含5个进程的优先级队列。每个进程都有相同的字段和不同的值。我有3节课。一个是该过程的模板,另一个是我将针对这些过程实现的实际算法和一个测试。我正在尝试打印出优先级队列中进程的所有arrival_time属性。这些字段都是整数,但实际的进程是Process类型,它会使PriorityQueue类崩溃。我在这里需要帮助。
头等舱:
package SPN;
public class Process {
public int arrive_time= 0;
private int burst_time = 0;
private int remain_time = 0;
public Process (int arr_time, int bur_time) {
this.arrive_time = arr_time;
this.burst_time = bur_time;
}
//public int getArrTime() {return arrive_time;}
public int getBurTime() {return burst_time;}
public int getRemTime() {return remain_time;}
}
第二课:
package SPN;
import java.util.*;
public class SPN {
private Process p1, p2, p3, p4, p5;
//Priority Queue of the processes
PriorityQueue<Process> prq = new PriorityQueue<Process>();
public SPN() {
p1 = new Process(0, 10);
prq.add(p1);
p2 = new Process(1, 8);
prq.add(p2);
p3 = new Process(2, 11);
prq.add(p3);
p4 = new Process(5, 6);
prq.add(p4);
p5 = new Process(7, 7);
prq.add(p5);
}
public void test() {
// create iterator from the queue
Iterator<Process> it = prq.iterator();
System.out.println("Values of queue: " + it.next());
}
}
第三课:
package SPN;
public class Test {
public static void main(String[] args) {
SPN spn = new SPN();
spn.test();
}
}
答案 0 :(得分:1)
为了使PriorityQueue能够对对象(Process对象)进行优先级排序,它必须是一个Comparable对象。
public class Process implements Comparable<Process> {
//your existing code here
@Override
public int compareTo(Process proc) {
//implement this
return 0;
}
}
答案 1 :(得分:1)
PriorityQueue
需要知道如何订购对象。有两种方法可以定义它:
1.正如@OriLentz所说,你可以使你的Process
具有可比性
2.您可以将显式Comparator
传递给PriorityQueue
的构造函数:
PriorityQueue<Process> prq = new PriorityQueue<Process>(10, new Comparator<Process>() {
@Override
public int compare(Process p1, Process p2) {
return Integer.compare(p1.arrive_time, p2.arrive_time);
}
});