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

StackOverflow https://stackoverflow.com/questions/627130

  •  06-07-2019
  •  | 
  •  

Вопрос

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 написано: " Глава этой очереди является наименьшим элементом по отношению к указанному порядку " ;. Таким образом, определение наименьшего является субъективным на основе вашего конкретного заказа, поэтому у вас есть возможность предоставить компаратор.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top