Java帮助:PriorityQueue

Java帮助:PriorityQueue,java,priority-queue,Java,Priority Queue,我有一门课叫jobType package pcs_assignment_2; public class JobType { private int ID; private double aTime; private double sTime; public JobType(int ID, double aTime, double sTime) { this.ID = ID; this.aTime = aTime;

我有一门课叫jobType

package pcs_assignment_2;

public class JobType
{
    private int ID;
    private double aTime;
    private double sTime;

    public JobType(int ID, double aTime, double sTime)
    {
        this.ID = ID;
        this.aTime = aTime;
        this.sTime = sTime;
    }

    public int getID() {
        return ID;
    }

    public void setID(int ID) {
        this.ID = ID;
    }

    public double getaTime() {
        return aTime;
    }

    public void setaTime(double aTime) {
        this.aTime = aTime;
    }

    public double getsTime() {
        return sTime;
    }

    public void setsTime(double sTime) {
        this.sTime = sTime;
    }

    public String toString() {
        return "JobType{" + "ID=" + ID + "aTime=" + aTime + "sTime=" + sTime + '}';
    }

}

现在我想要的是JobType类型的优先级,它根据时间对队列进行排序。有可能吗?

您可以有一个简单的列表,列出所有作业所在的位置,然后在想取出作业之前,使用屏幕上的比较功能对列表进行排序

需要编写自定义比较器,请参见下面的代码。 这里10是队列的初始容量

    new PriorityQueue<JobType>(10, new Comparator<JobType>() {

    @Override
    public int compare(JobType o1, JobType o2) {
             return Double.compare(o1.sTime,o2.sTime); 
    }
    });
newpriorityqueue(10,新的比较器(){
@凌驾
公共整数比较(作业类型o1、作业类型o2){
返回双倍。比较(o1.sTime,o2.sTime);
}
});

使用带有
比较器的
优先队列
。请参见)

除了comparator选项之外,我相信只要让您的类实现可比较的接口,就可以实现相同的行为;只有在这种排序模仿对象的自然排序时才这样做。

您在理解JavaDocs的哪一部分时遇到问题?使用比较器…可能重复-这有一个具体的例子,即使用PriorityQueue和比较器。当添加对象时,que的容量是否会不断增加?是,会的。它只是一个初始容量,并没有只用于比较器的构造函数。为每个比较创建一个
Double
,成本很高。另一种方法是使用
Double.compare(o1.sTime,o2.sTime)
Good comment!,成功change@Peter为什么你说为每次比较创建
Double
很昂贵?因为对象创建开销?