Java — Collections.binarySearch с PriorityQueue?

Могу ли я использовать метод Collections.binarySearch() для поиска элементов в PriorityQueue? В противном случае, как я могу применить алгоритмы поиска к PriorityQueue?

У меня есть это (класс Evento реализует Comparable):

    public class PriorityQueueCAP extends PriorityQueue<Evento>{

       // (...)

       public void removeEventos(Evento evento){

           Collections.binarySearch(this, evento); // ERROR!

       }
    }

И у меня такая ошибка: "Метод binarySearch(List>,T) в типе Collections неприменим для аргументов (PriorityQueueCAP, Evento)"

Почему?

Заранее спасибо!


person rasgo    schedule 21.05.2010    source источник


Ответы (2)


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

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

person erickson    schedule 21.05.2010
comment
Очередь с приоритетом предназначена для обеспечения эффективного доступа к элементу коллекции с наивысшим приоритетом. Я использую его с этой целью. Однако мне также нужно эффективно находить элементы. Как я могу это сделать? - person rasgo; 22.05.2010
comment
Наиболее эффективным методом поиска в куче будет проверка O(n) каждого элемента, возвращаемого его итератором. - person erickson; 22.05.2010
comment
Это то, что я использую. Но, похоже, это занимает много времени, так как мне приходится делать это очень часто, а размер очереди приоритетов составляет около 5000 (или больше). - person rasgo; 22.05.2010
comment
Верно. Это лучшее, на что вы можете надеяться, если будете придерживаться приоритетной очереди. Рассматривали ли вы вместо удаления объектов из очереди пометку объекта как отмененного или игнорируемого? Таким образом, вам не нужно копаться в содержимом очереди, а просто дождаться, пока оно появится, и выбросить его без обработки. - person erickson; 22.05.2010

В этом руководстве показано, как инициировать сбор и возможные операции. вы можете выступать на нем. Вы должны помнить, что сказал Эриксон.

person npinti    schedule 21.05.2010