gpt4 book ai didi

java - Java 中的优先级队列 - 检索特定元素

转载 作者:行者123 更新时间:2023-12-02 12:32:30 25 4
gpt4 key购买 nike

我有一个优先级队列,其中包含名为“进程”的自定义类型的元素。每个进程有 3 个字段。我需要能够从优先级队列中检索一个进程,该进程的某个字段具有特定值。我怎样才能做到这一点? poll() 似乎总是返回队列的头部。

这是我的 Process 类的代码:

package SPN;

public class Process implements Comparable<Process> {

@Override
public int compareTo(Process proc) {
//implement this
return 0;
}

private 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;}
}

在另一个类中,我创建了一个名为 prq 的优先级队列,并添加了具有不同字段值的进程。不用担心代码不完整。我只是无法添加所有内容,因为它将是代码页。像这样的事情:

p1 = new Process(2, 10);
prq.add(p1);

p2 = new Process(1, 8);
prq.add(p2);

p3 = new Process(0, 11);
prq.add(p3);

我需要能够检索进程 p3,因为它具有最早的到达时间。我怎样才能做到这一点?以下似乎仅检索并删除优先级队列的头部。不建议使用不同的数据结构,因为这实际上不起作用。必须是优先级队列,因为我还需要根据其他字段进行进一步选择。

Process current = prq.poll();

最佳答案

您应该像这样实现 compareTo 方法:

@Override
public int compareTo(Process proc) {
// this.arriveTime > proc.arriveTime --> >0
// this.arriveTime < proc.arriveTime --> <0
// this.arriveTime = proc.arriveTime --> 0
return this.arriveTime - proc.arriveTime;
}

这样 arriveTime 较小的项目将首先出现。

关于java - Java 中的优先级队列 - 检索特定元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29509362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com