我对这个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;
}
}
}
答案 0 :(得分:5)
PriorityQueue
按顺序存储其元素。它按顺序给你回复。
如果您在poll()
上致电PriorityQueue
三次,则可以按照相应的顺序取回您的元素。