Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
优先级队列上的classCastException;JAVA_Java - Fatal编程技术网

优先级队列上的classCastException;JAVA

优先级队列上的classCastException;JAVA,java,Java,我正在实现一个由5个进程组成的优先级队列。每个进程都有相同的字段和不同的值。我有三节课。一个是流程的模板,另一个是我将要实现的关于这些流程和一个测试的实际算法的模板。我试图打印出优先级队列中进程的所有到达时间属性。这些字段都是整数,但实际进程的类型是Process,这会使PriorityQueue类崩溃。我需要帮助 头等舱: package SPN; public class Process { public int arrive_time= 0; private int b

我正在实现一个由5个进程组成的优先级队列。每个进程都有相同的字段和不同的值。我有三节课。一个是流程的模板,另一个是我将要实现的关于这些流程和一个测试的实际算法的模板。我试图打印出优先级队列中进程的所有到达时间属性。这些字段都是整数,但实际进程的类型是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());
    }
}

为了使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);
      }
});