优先级队列上的classCastException;JAVA
我正在实现一个由5个进程组成的优先级队列。每个进程都有相同的字段和不同的值。我有三节课。一个是流程的模板,另一个是我将要实现的关于这些流程和一个测试的实际算法的模板。我试图打印出优先级队列中进程的所有到达时间属性。这些字段都是整数,但实际进程的类型是Process,这会使PriorityQueue类崩溃。我需要帮助 头等舱:优先级队列上的classCastException;JAVA,java,Java,我正在实现一个由5个进程组成的优先级队列。每个进程都有相同的字段和不同的值。我有三节课。一个是流程的模板,另一个是我将要实现的关于这些流程和一个测试的实际算法的模板。我试图打印出优先级队列中进程的所有到达时间属性。这些字段都是整数,但实际进程的类型是Process,这会使PriorityQueue类崩溃。我需要帮助 头等舱: package SPN; public class Process { public int arrive_time= 0; private int b
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());
}
}
为了使PriorityQueue能够对对象(流程对象)进行优先级排序,它需要是一个可比较的对象
public class Process implements Comparable<Process> {
//your existing code here
@Override
public int compareTo(Process proc) {
//implement this
return 0;
}
}
公共类流程实现了可比较的{
//您的现有代码在这里
@凌驾
公共int比较(过程过程){
//实施这个
返回0;
}
}
PriorityQueue
需要知道如何对对象进行排序。定义它有两种方式:1.正如@OriLentz所说,您可以使您的
流程
具有可比性。2.您可以将显式
比较器
传递给优先级队列
的构造函数:
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);
}
});
PriorityQueue prq=新的PriorityQueue(10,新的比较器(){
@凌驾
公共整数比较(进程p1、进程p2){
返回整数。比较(p1.到达时间,p2.到达时间);
}
});
请添加准确的堆栈跟踪。我尝试将ImplementComparable放入Comparable,但我不知道需要覆盖的compareTo()。在进程类中取消注释getArrTime()
,然后在SPN
中,当您迭代这些项时,每个项的类型都是Process
,因此您只需执行it.next().getArrTime())
非常感谢。我也一样。:)
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);
}
});