如何创建基于类的某些属性进行排序的优先级队列?

时间:2013-03-26 19:54:31

标签: java priority-queue

我创建了一个Node类:

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

            ???
        }
    }

我不太确定如何覆盖它。

2 个答案:

答案 0 :(得分:2)

您实际上只需要比较两种延迟。这意味着覆盖比较两个输入compare的延迟的比较器类Node的方法:

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());
    }
}

但是这仅适用于Java 7,对于其他版本:

new Integer(a.getLatency()).compareTo(new Integer(b.getLatency()));

如果您不想创建新的对象,请照常比较int

答案 1 :(得分:1)

“???”在您的示例中可以替换为以下内容:

public int compare(Node a, Node b) {
    if (a.getLatency() < b.getLatency())
        return -1;
    else if (a.getLatency() > b.getLatency())
        return 1;
    return 0;
}