Ja, PriorityQueue
hat eine Konstrukteur die es Ihnen ermöglicht, eine Comparator
um die Reihenfolge der Elemente festzulegen. Zum Beispiel, wenn Sie folgendes haben Bar
Klasse:
public class Bar {
private int priority;
// getters / setters ...
}
Und Sie möchten eine Prioritätswarteschlange erstellen, die die Elemente auf der Grundlage der priority
(z. B. bleiben Elemente mit höherer Priorität vorne in der Warteschlange), können Sie Folgendes verwenden:
Queue<Bar> queue = new PriorityQueue<Bar>(new Comparator<Bar>() {
public int compare(Bar a1, Bar a2) {
return a2.getPriority() - a1.getPriority(); // adapt this to your needs
}
});
Wenn Sie eine komplexere Logik in der compare
Methode, oder wenn Sie den Code wiederverwenden wollen, dann schlage ich vor, dass Sie eine Klasse erstellen, z.B. BarComparator
, die Folgendes implementiert Comparator<Bar>
.
Als Alternative zu den oben genannten Möglichkeiten können Sie auch Bar
Umsetzung der Comparable
Schnittstelle, und verwenden Sie die leer Konstruktor, etwa so:
public class Bar implements Comparable<Bar> {
private int priority;
@Override
public int compareTo(Bar b) {
return b.getPriority() - this.priority;
}
}
Ich hoffe, es hilft.