一尘不染

java.util.PriorityQueue和特定的Comparator中的顺序错误

java

我对java.util.PriorityQueue和我自己的Comparator的这个小例子感到非常困惑:

在这段代码中,我在队列中得到了错误的顺序。结果是:5,8,7而不是5,7,8 我有什么问题Comparator<Vertex>吗?谢谢您的帮助。

public class Test {

public static void main(String[] args) {
    PriorityQueue<Vertex> priorityQueue = new PriorityQueue<Vertex>(new Comparator() {
        @Override
        public int compare(Object o1, Object o2) {
            Vertex u = (Vertex) o1;
            Vertex v = (Vertex) o2;
            return Integer.compare(new Integer(u.distance), new Integer(v.distance));
        }
    });

    Vertex vertex1 = new Vertex(1);
    Vertex vertex2 = new Vertex(2);
    Vertex vertex3 = new Vertex(3);
    Vertex vertex4 = new Vertex(4);

    vertex1.distance = 8;
    vertex2.distance = 5;
    vertex3.distance = 7;


    priorityQueue.add(vertex1);
    priorityQueue.add(vertex2);
    priorityQueue.add(vertex3);

}

private static class Vertex {
    int distance;
    int id;

    public Vertex(int id) {
        this.id = id;
    }
}
}

阅读 186

收藏
2020-12-03

共1个答案

一尘不染

A PriorityQueue不会按顺序存储其元素。它可以按顺序将它们还给您。

如果您在上调用了poll()3次PriorityQueue,则会以适当的顺序恢复元素。

2020-12-03