Компаратор не работает правильно для Priorityqueue Java - PullRequest
0 голосов
/ 03 мая 2018

Я добавляю ребра в 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;
}

Тем не менее, когда я запускаю свой код, где я добавляю addAll в LinkedList, принадлежащий узлу "Springfield, MO" к PriorityQueue, края сортируются в неправильном порядке, как показано ниже, в чем проблема?

queue.addAll(list.get(node));

enter image description here

Я попытался создать специальный класс компаратора для Edge и использовать его в качестве параметра в PriorityQueue, но я все еще получаю тот же результат.

1 Ответ

0 голосов
/ 03 мая 2018

Внутренняя структура PriorityQueue не упорядочена, это куча, вы можете проверить этот вопрос.

Когда вы извлекаете данные, используя метод peek или poll, они гарантированно заказываются.

Но будьте осторожны при итерации очереди:

Итератор, предоставляемый в методе iterator (), не гарантируется для пройти элементы очереди с приоритетами в любом конкретном порядке. Если вам нужен упорядоченный обход, подумайте об использовании Arrays.sort (pq.toArray ()).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...