我正在向PriorityQueue添加边缘但由于某种原因它们没有按其值排序,导致稍后出现错误结果。
我的边缘类看起来像这样
class Edge implements Comparable<Edge>{
int value;
String dest;
String start;
public Edge(String start, String dest, int g) {
this.dest = dest;
value = g;
this.start = start;
}
@Override
public int compareTo(Edge o) {
int temp = value - o.value;
if (temp > 0) {
return 1;
}
if (temp < 0) {
return -1;
}
return 0;
}
然而,当我运行我的代码,我在属于Node“Springfield,MO”的LinkedList上将addAll添加到PriorityQueue时,Edges按照错误的顺序排序,如下所示,问题是什么?
queue.addAll(list.get(node));
我试图为Edge创建一个特定的比较器类,并将其用作PriorityQueue中的参数,但我仍然得到相同的结果。
答案 0 :(得分:3)
PriorityQueue
的内部结构没有排序,它是一堆,您可以检查this问题。
使用方法peek
或poll
检索数据时,可以保证订购。
但是当你对队列进行迭代时要小心:
方法iterator()中提供的迭代器无法保证 以任何特定顺序遍历优先级队列的元素。 如果您需要有序遍历,请考虑使用 Arrays.sort(pq.toArray())。