4 Stimmen

Vorrangige Warteschlange in Java?

Ist es in Java möglich, eine PriorityQueue von Objekten zu erstellen, bei der der Schlüssel, der über die Priorität entscheidet, das Mitglied des Objekts ist?

Alle Beispiele, die ich im Netz sehe, fügen eine Ganzzahl in die PriorityQueue ein und rufen sie ab. Ich bin auf der Suche nach einer Implementierung, die eine Instanz eines Objekts einfügen würde und basierend auf einem seiner Mitgliedswerte, die eine ganze Zahl sein könnte, abgerufen wird.

17voto

João Silva Punkte 84947

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X