按指定值对对象的优先级队列进行排序

mir*_*iro 3 java priority-queue

我想通过使用这样的指定值将对象添加到优先级队列

PriorityQueue<Edge> queue=new PriorityQueue<Edge>();
Run Code Online (Sandbox Code Playgroud)

这是 Edge 类,我想按其权重在优先级队列中排序

public class Edge {
private int start,end;
private double weight;

public Edge(int s, int e,Double w){
    start=s;
    end=e;
    weight=w;
}

public int getStart(){
    return start;
}

public int getEnd(){
    return end;
}

public double getWeight(){
    return weight;
}
Run Code Online (Sandbox Code Playgroud)

luk*_*302 5

您应该通过指定如何比较其元素来创建稍微不同的优先级队列。Comparator这是通过为类传递匿名来完成的Edge

PriorityQueue<Edge> queue=new PriorityQueue<Edge>(10, new Comparator<Edge>() {
    public int compare(Edge edge1, Edge edge2) {
        if (edge1.getWeight() < edge2.getWeight()) return -1;
        if (edge1.getWeight() > edge2.getWeight()) return 1;
        return 0;
    }
});
Run Code Online (Sandbox Code Playgroud)

也许您将不得不根据您的排序顺序切换-1和的返回。1