Как мне исправить приоритетную очередь Java для правильной сортировки по определенному свойству?

У меня есть Java PriorityQueue для сортировки объектов из определенного мной класса под названием Node. Я хочу, чтобы он отсортировал узлы по их методу getData (). Я попробовал следующий код (с использованием компаратора), но он не сработал. Когда я вызвал метод «опроса» очереди с приоритетами, он сначала возвращал не самые низкие результаты, а в кажущемся случайном порядке. Как мне это исправить? Спасибо!

PriorityQueue<Node> pq = new PriorityQueue<Node>(hm.size(),
        new Comparator<Node>( ) {
            // override the compare method
            public int compare(Node i, Node j) {
                if (i.getData()<j.getData()){
                                        return i.getData(); //It should sort by the Node's getData method.
                                    }
                                    return j.getData();

person Ari    schedule 05.04.2011    source источник
comment
Не вышло что ты имеешь ввиду? Каковы были ваши входные и выходные данные и каковы были ожидаемые результаты?   -  person corsiKa    schedule 06.04.2011


Ответы (2)


Перепишите метод сравнения:

public int compare(Node i, Node j) {
  return i.getData() - j.getData()
}

Это будет соответствовать требованиям метода compare, чтобы возвращать значение меньше, равное или больше нуля в зависимости от результата сравнения.

person oiavorskyi    schedule 05.04.2011
comment
С точки зрения ООП - да, однако я имел в виду кое-что в коде, который вы предоставили, чтобы изменить содержание метода сравнения. - person oiavorskyi; 06.04.2011
comment
Кстати, уязвим для целочисленного переполнения. - person axtavt; 06.04.2011

компаратор должен возвращать -1 (отрицательное число), 0 или +1 (положительное число) в зависимости от того, является ли первый операнд меньше, равен или больше второго операнда. Вы возвращаете сами данные, которые не будут делать то, что вы хотите.

person Jim Garrison    schedule 05.04.2011