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

时间:2014-11-06 16:38:17

标签: java priority-queue comparator

我对这个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;
    }
}
}    

1 个答案:

答案 0 :(得分:5)

PriorityQueue按顺序存储其元素。它按顺序给你回复。

如果您在poll()上致电PriorityQueue三次,则可以按照相应的顺序取回您的元素。