2013-07-09 5 views
0

У меня есть класс сравнения NComparator, который сравнивает 2 объекта Node и возвращает либо 1, -1, либо 0.PriorityQueue, что мне не хватает?

Я инициализировал PriorityQueue с начальной емкостью 100 и этим NComparator.

NComparator nc = new NComparator(); 
    PriorityQueue<Node> pq = new PriorityQueue<Node>(100, nc); 

Я около 25 объектов Node (которые можно сравнить с NComparator), и я добавил их всех к PriorityQueue объекта:

pq.add(new Node("A", 3)); 
    pq.add(new Node("G", 1)); 
    pq.add(new Node("B", 10)); 
    .... etc 

Как организовать эти объекты узла в PriorityQueue от приоритет, возвращаемый компаратором (который сравнивает только попарные комбинации узлов)? В частности, я хотел бы иметь доступ к двум узлам с наименьшим приоритетом в этом PriorityQueue. Как я могу это сделать?

+0

Это поможет http://stackoverflow.com/questions/11003155/change-priorityqueue-to-max-priorityqueue –

ответ

2

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

+0

Спасибо, я вижу. Я также не понимал, что, когда я делаю pq.add, PriorityQueue автоматически добавляет их, чтобы они всегда сохранялись в порядке. Поэтому удаление элемента будет удалять его самый низкий приоритет. – LanneR

0

Если вы уверены, что ваш NComparator упорядочивает элементы Node правильно, и наименее приоритеты в голове очереди, то вам только нужно сделать, дважды: pq.poll()See the PriorityQueue API

Пример:

Node firstLowerNode = pq.poll(); 
    Node secondLowerNode = pq.poll(); 
Смежные вопросы