Как исправить приоритетную очередь Java для правильной сортировки по определенному свойству? - PullRequest
1 голос
/ 06 апреля 2011

У меня есть 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();

Ответы [ 2 ]

8 голосов
/ 06 апреля 2011

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

4 голосов
/ 06 апреля 2011

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

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

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

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