比较器无法正常使用Priorityqueue Java

时间:2018-05-03 11:48:23

标签: java linked-list comparator priority-queue

我正在向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));

enter image description here

我试图为Edge创建一个特定的比较器类,并将其用作PriorityQueue中的参数,但我仍然得到相同的结果。

1 个答案:

答案 0 :(得分:3)

PriorityQueue的内部结构没有排序,它是一堆,您可以检查this问题。

使用方法peekpoll检索数据时,可以保证订购。

但是当你对队列进行迭代时要小心:

  

方法iterator()中提供的迭代器无法保证   以任何特定顺序遍历优先级队列的元素。   如果您需要有序遍历,请考虑使用   Arrays.sort(pq.toArray())。