Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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
Java 如何创建基于类的特定属性排序的优先级队列?_Java_Priority Queue - Fatal编程技术网

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()b.getLatency()) 返回1; 返回0; }
您实际上只需要比较两个延迟。这意味着重写比较两个输入
节点的延迟的类比较器的方法
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()));