В Java, что я должен использовать для PriorityQueue, который сначала возвращает наибольший элемент? - PullRequest
2 голосов
/ 09 марта 2009

Java PriorityQueue помещает наименьший элемент в начало списка, однако мне нужно, чтобы наибольший элемент помещался в начало списка. Какой самый лучший способ получить приоритетную очередь, которая ведет себя так.

Поскольку я написал класс, хранящийся в этой очереди, я мог просто обратить результаты compareTo, так как он не используется за пределами этой очереди.

Однако мне нравится делать код точным представлением того, что я моделирую, то, что я пытаюсь сделать, это получить сначала самое большое, поэтому код должен сказать это, а не как минимум сначала с необычным определением наименьшего.

[править] Просто спасибо всем, Comparator звучит как то, что мне нужно, как только я учусь писать.

Ответы [ 7 ]

10 голосов
/ 09 марта 2009

Передайте Компаратор , который инвертирует естественный порядок при создании экземпляра PriorityQueue .

Это будет выглядеть примерно так:

public class ReverseYourObjComparator implements Comparator<YourObj> {
    public int compare(final YourObj arg0, final YourObj arg1) {
        return 0 - arg0.compareTo(arg1);
    }
}
3 голосов
/ 09 марта 2009

У вас, по сути, есть правильное решение в вашем вопросе: вы можете передать Comparator в конструктор PriorityQueue . Компаратор будет влиять на способ заказа товаров.

2 голосов
/ 09 марта 2009

Из документов:

PriorityQueue(int initialCapacity, Comparator<? super E> comparator) 
2 голосов
/ 09 марта 2009

Просто предоставьте PriorityQueue Custom Comparator<? super E> через конструктор и измените порядок элементов.

2 голосов
/ 09 марта 2009

Я бы просто использовал Компаратор. Таким образом, порядок сортировки используется только в вашей очереди, а не привязан к вашему классу.

1 голос
/ 09 марта 2009

Чтобы добавить к комментариям компаратора, проверьте:

Collections.reverseOrder();
0 голосов
/ 09 марта 2009

Документация API для PriorityQueue гласит: «Глава этой очереди является наименьшим элементом по отношению к указанному порядку». Таким образом, определение наименьшего субъективно на основе вашего конкретного заказа, поэтому у вас есть возможность предоставить компаратор.

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