我对java.util.PriorityQueue和我自己的Comparator的这个小例子感到非常困惑:
在这段代码中,我在队列中得到了错误的顺序。结果是:5,8,7而不是5,7,8 我有什么问题Comparator<Vertex>吗?谢谢您的帮助。
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; } } }
A PriorityQueue不会按顺序存储其元素。它可以按顺序将它们还给您。
PriorityQueue
如果您在上调用了poll()3次PriorityQueue,则会以适当的顺序恢复元素。
poll()