当尝试在优先级队列中为泛型对象赋予优先级时,我可以使用什么来比较它们?我可以从Comparable接口定义并使用重写的CompareTo方法,还是从Comparator接口定义并使用重写的CompareTo方法?或者我可以用一个还是另一个?谢谢
下面是实例变量、类的构造函数和当前的compareTo方法。
private LocalTime scheduledTime; //the scheduled time of the flight
private Event.EventType eventType; //the event type of the flight (arrival or departure)
private String identifier; // the identifier of the flight
private LocalTime actualTime; //the actual time the flight uses a runway
private Runway runwayUsed; //the runway the flight used to arrive or depart
private int reserveTime; // time the flight uses to reserve a runway
private LocalTime runwayAvailableTime;
/**
* Constructor
* @param scheduledTime the scheduled time of the flight
* @param eventType the event of the flight (arrival or departure)
* @param identifier the identifier of the flight
*/
protected Flight(String scheduledTime, String eventType, String identifier) {
this.scheduledTime = LocalTime.parse(scheduledTime);
this.eventType = EventType.valueOf(eventType);
this.identifier = identifier;
this.actualTime = null;
this.runwayUsed = null;
}
//Here is the compareTo method I am currently using. Should I use compare //from the Comparator interface instead?
@Override
public int compareTo(Event otherFlight) {
Event tmpFlight = (Event) otherFlight;
if(this.scheduledTime.compareTo(tempFlight.getScheduledTime()) == 0) {
if(this.eventType.compareTo(tempFlight.getEvent()) == 0){
return 0;
}
else if(this.eventType.compareTo(tempFlight.getEvent()) > 0){
return 1;
}
else {
return -1;
}
}
else if(this.scheduledTime.compareTo(tempFlight.getScheduledTime()) < 0) {
return -1;
}
else {
return 1;
} }
因为您已经实现了compareTo
,所以您有可比
Flight
或事件
实例。
这意味着您已将其设置为与可比较的
对象一起使用。以下所有操作都应有效:
Queue<Event> eventQueue = new PriorityQueue<>();
eventQueue.add(new Flight(scheduledTime, eventType, identifier));
或:
List<Flight> flightList = Arrays.asList(new Flight(scheduledTime,
eventType, identifier));
Queue<Flight> flightQueue = new PriorityQueue<>(flightList);
或:
List<Event> eventList = ...;
Queue<Event> eventQueue = new PriorityQueue<>(eventList);
PiorityQueue
类应该能够根据您的compareTo
排序所指定的顺序来处理优先级。
注意:如果您的列表
我有2个RabbitMQ队列: = 正如您对其名称所设想的那样,队列使用死信交换功能,这意味着当消息过期时,它将被重新调用到我的。 我试图实现的是在每次处理失败并将消息推送到DLX队列时增加消息的。 问题是,即使消息过期,当它不在队列的底部(头部)时,它也不会请求我的。因此,如果DLX队列中有到期时间为7天的消息,并且我们将到期时间为5秒的新消息加入队列,则该消息将仅在7天5秒后请求到。... 我
我是新来的工作与优先级队列和格式化此代码错误,我想让我的优先级是一个城市的直线距离,但我不相信我传递了这个信息正确的队列。查看API,我需要将SLD设置为比较器 [CNNVD]Public PriorityQueue PriorityQueue多个元素的排序问题(CNNVD-200605-045)Public PriorityQueue(int初始容量,比较器比较器) 创建具有指定初始容量的Pri
我需要使用Java中的优先级队列实现Dijkstra的算法。这是我到目前为止的代码: 我需要填写最短路径方法并返回节点数组。但是,我不确定如何做到这一点。我知道我需要在某个时候进行优先排队,但有人可以向我解释一下如何吗?我已经制作了startNode,我知道我需要为它分配一个距离值0,其余节点的距离值为无穷大。另外,可比性从何而来?
问题内容: 总体而言,我正在尝试使用优先级队列来实现Dijkstra的算法。 根据golang-nuts的成员所述,Go中惯用的方法是将堆接口与自定义的基础数据结构一起使用。所以我像这样创建了Node.go和PQueue.go: 和PQueue.go: 和main.go :(动作在SolveMatrix中) 问题是,在编译时我收到错误消息: 注释掉PQ.Push(firstNode)行确实使编译器
我正在使用优先级队列实现Dijkstra的算法,我想要一个函数从堆中删除一个元素,但我只能从Dijkstra的主节点索引中向它发送顶点索引,我找不到它在堆上的位置,我负担不起进行二进制搜索。有什么想法吗?
我一直在努力实现Dijkstra的算法;更具体地,具有优先级队列的部分。将顶点添加到数据结构中,并使用迭代器遍历所有顶点并找到最小距离;这很容易,但这次是。 我想要的是: < li >能够将顶点插入数据结构中 < li >提取(返回并移除)距离dist[v]最小的顶点v 我相信为了让Dijkstra的算法正常工作,你应该能够在恒定时间内插入顶点并在log(n)时间内提取它们;有人建议可以使用优先级