Сначала создайте компаратор для очереди приоритетов:
class MinHeapComparator implements Comparator<Integer> {
@Override
public int compare(Integer one, Integer two) {
return mDistances[one] - mDistances[two];//...
}
}
Это из алгоритма кратчайшего пути, который я написал.mDistances - это расстояния от источника до вершины.Вы можете изменить компаратор, чтобы сравнить, как вам нравится.
Из документации для Comparator: «Сравнивает два аргумента для порядка. Возвращает отрицательное целое число, ноль или положительное целое число, так как первый аргумент меньше, равен или больше второго.»
Полная документация здесь: http://download.oracle.com/javase/1.5.0/docs/api/java/util/Comparator.html
Во-вторых, добавьте элементы в приоритетную очередь.Я обычно строю граф с массивом, содержащим объекты вершин, каждый из которых содержит список смежных вершин.Так что в моем случае я просто добавляю индексы в очередь приоритетов для представления вершин.Компаратор затем может содержать логику, чтобы делать что-либо с вершинами.PriorityQueue.add () добавляет элементы.
В-третьих, создайте экземпляр очереди приоритетов с помощью компаратора:
PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>(numberItems, new MinHeapComparator());
В-четвертых, вызовите PriorityQueue.poll () для извлечения верхнего элемента в куче.Ваш компаратор используется для определения того, что находится на вершине кучи.