Java 如何创建基于类的特定属性排序的优先级队列?
我创建了一个节点类:Java 如何创建基于类的特定属性排序的优先级队列?,java,priority-queue,Java,Priority Queue,我创建了一个节点类: public class Node { int vertex; double latency; Node predecessor;} public double getLatency() { return latency; } 我想创建一个优先级队列,按照延迟从最小到最大对节点进行排序。经过研究,我认为我需要覆盖比较器 PriorityQueue<Node> pqueue = new PriorityQueue<Node>(numVer
public class Node {
int vertex;
double latency;
Node predecessor;}
public double getLatency()
{
return latency;
}
我想创建一个优先级队列,按照延迟从最小到最大对节点进行排序。经过研究,我认为我需要覆盖比较器
PriorityQueue<Node> pqueue = new PriorityQueue<Node>(numVertices, new Comparator<Node>({
@Override
???
}
}
PriorityQueue pqueue=new PriorityQueue(numvities,new Comparator({
@凌驾
???
}
}
我不太确定如何覆盖它。您的示例中的“?”可以替换为以下内容:
public int compare(Node a, Node b) {
if (a.getLatency() < b.getLatency())
return -1;
else if (a.getLatency() > b.getLatency())
return 1;
return 0;
}
公共整数比较(节点a、节点b){
if(a.getLatency()您实际上只需要比较两个延迟。这意味着重写比较两个输入
节点的延迟的类比较器的方法compare
:
PriorityQueue<Node> pqueue = new PriorityQueue<Node>(numVertices, new Comparator<Node>({
@Override
public int compare(Node a, Node b) {
return Integer.compare(a.getLatency(), b.getLatency());
}
}
如果你不想创建一个新对象,那么像往常一样比较这两个int
2分钟谷歌就会给你答案。
new Integer(a.getLatency()).compareTo(new Integer(b.getLatency()));