Die Elemente der Prioritätswarteschlange werden nach ihrer natürlichen Reihenfolge geordnet oder von einem Comparator, der zum Zeitpunkt der Warteschlangenerstellung bereitgestellt wird.
Der Komparator sollte die Vergleichsmethode überschreiben.
int compare(T o1, T o2)
Standard vergleichen Methode eine negative ganze Zahl zurückgibt, Null oder eine positive ganze Zahl als das erste Argument kleiner als, gleich oder größer als der zweite.
Der Standard Priorityqueue von Java zur Verfügung gestellt ist Min-Heap, Wenn Sie eine max Heap wollen finden Sie den Code
public class Sample {
public static void main(String[] args) {
PriorityQueue<Integer> q = new PriorityQueue<Integer>(new Comparator<Integer>() {
public int compare(Integer lhs, Integer rhs) {
if(lhs<rhs) return +1;
if(lhs>rhs) return -1;
return 0;
}
});
q.add(13);
q.add(4);q.add(14);q.add(-4);q.add(1);
while (!q.isEmpty()) {
System.out.println(q.poll());
}
}
}
Referenz: https://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html#comparator()
Ich denke, dass Sie den Konstruktor verwenden sollten, der einen Komparator für das empfängt. Verwenden Sie den Collections.reverseOrder, um einen umgekehrten Komparator zu erhalten. –
müssen Sie einen Komparator übergeben. siehe http://stackoverflow.com/questions/683041/java-how-doi-i-use-a-priorityqueue – DarthVader