Очередь с максимальным приоритетом в стандартных коллекциях Java.Есть один? - PullRequest
0 голосов
/ 21 января 2012

Мне нужна структура данных Max-Priority Queue.

Поиск в Java Приоритетная очередь Я заметил, что это Min-Priority Queue.

От javadoc:

Голова этой очереди является наименьшим элементом по отношению к указанному порядку

Я видел, что есть опцияпредоставьте пользовательский Comparator и, глядя на некоторые посты, некоторые предлагают использовать один и сделать обратное сравнение для достижения результата Max Priority Queue.
Это кажется мне хоть и "уродливым взломом" и, возможно, не интуитивным.

Это единственный способ получить Max-Priority Queue из стандартной коллекции Java?
Есть ли более подходящий объект, который мне не хватает?(Например, некоторое время назад я не осознавал, что Stack был заменен на Deque ... мой плохой)

Ответы [ 2 ]

7 голосов
/ 21 января 2012

AFAIK, да, это лучший способ получить то, что вы хотите.Я действительно не понимаю, как это безобразно.Нет смысла предоставлять два разных класса, если достаточно одного.Если бы мы следовали вашим рассуждениям, у нас были бы MinTreeSet и MaxTreeSet, MinTreeMap, MaxTreeMap и т. Д., Все делали бы одно и то же.Это классическое использование шаблона стратегии.

Просто используйте Collections.reverseOrder(), чтобы получить компаратор, который сравнивает в обратном порядке естественного порядка.

2 голосов
/ 21 января 2012

Это не Min-Heap.Вы неверно истолковываете эту часть:

Голова этой очереди является наименьшим элементом по отношению к указанному порядку.

Акцент сделан на указанном порядке .Это может быть что угодно, включая сравнение по убыванию.Предоставление собственного компаратора - это то, как он должен использоваться, и это определенно не «уродливый хак».

В самом начале:

Эта очередь упорядочивает элементы в соответствии с указанным порядкомво время построения, которое указывается либо в соответствии с их естественным порядком (см. Comparable), либо в соответствии с Comparator, в зависимости от того, какой конструктор используется.

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

...