В Java, что я должен использовать для PriorityQueue, который сначала возвращает наибольший элемент?
Вопрос
Java PriorityQueue наименьший элемент в начале списка, однако мне нужно, чтобы поместить самый большой элемент в начало. Какой самый лучший способ получить приоритетную очередь, которая ведет себя так.
Поскольку я написал класс, хранящийся в этой очереди, я мог просто изменить результаты compareTo
, так как он не используется вне этой очереди. Р>
Однако мне нравится делать код точным представлением того, что я моделирую, и я пытаюсь получить сначала самое большое, поэтому код должен сказать это, а не как минимум сначала с необычным определением наименьшего. Р>
[править] просто спасибо всем, Comparator звучит как то, что мне нужно, как только я учусь писать.
Решение
Передайте Comparator инвертирует естественный порядок, когда вы создаете экземпляр PriorityQueue .
Это будет выглядеть примерно так:
public class ReverseYourObjComparator implements Comparator<YourObj> {
public int compare(final YourObj arg0, final YourObj arg1) {
return 0 - arg0.compareTo(arg1);
}
}
Другие советы
По сути, у вас есть правильное решение в вашем вопросе: вы можете передать Компаратор с конструктором PriorityQueue . Компаратор будет влиять на порядок заказа товаров.
Я бы просто использовал Компаратор. Таким образом, порядок сортировки используется только в вашей очереди, а не привязан к вашему классу.
Просто предоставьте PriorityQueue
пользовательский Comparator<? super E>
через конструктор и измените порядок элементов.
Из javadocs:
PriorityQueue(int initialCapacity, Comparator<? super E> comparator)
Чтобы добавить к комментариям компаратора, ознакомьтесь:
Collections.reverseOrder();
В документации API для PriorityQueue написано: " Глава этой очереди является наименьшим элементом по отношению к указанному порядку " ;. Таким образом, определение наименьшего является субъективным на основе вашего конкретного заказа, поэтому у вас есть возможность предоставить компаратор. Р>