In Java, was soll ich für eine Priorityqueue verwenden, die zuerst das größte Element zurückgibt?

StackOverflow https://stackoverflow.com/questions/627130

  •  06-07-2019
  •  | 
  •  

Frage

Java Orte Priorityqueue das kleinste Element an der Spitze der Liste, aber ich brauche es das größte Element an der Spitze zu platzieren. Was was ist der sauberste Weg, um eine Prioritätswarteschlange zu erhalten, die so verhält.

Da ich die Klasse in dieser Warteschlange gespeichert schrieb ich einfach die Ergebnisse von compareTo umkehren könnte, es ist nicht außerhalb dieser Warteschlange verwendet.

Allerdings möchte ich den Code eine genaue Darstellung von dem, was ich bin Modellierung, was ich versuche, die größte bekommen zuerst zu tun ist, so sollte der Code sagen, dass anstatt wenigste zuerst mit einer ungewöhnlichen Definition des geringsten.

[Bearbeiten] nur ein schnell danke alle, Komparator klingt wie das, was ich brauche nur so schnell, wie ich mir beibringen, wie man schreiben.

War es hilfreich?

Lösung

Übergeben Sie einen Vergleicher , die die natürliche Ordnung invertiert, wenn Sie die Priorityqueue .

Es würde wie folgt aussehen:

public class ReverseYourObjComparator implements Comparator<YourObj> {
    public int compare(final YourObj arg0, final YourObj arg1) {
        return 0 - arg0.compareTo(arg1);
    }
}

Andere Tipps

Sie grundsätzlich die Lösung direkt in Ihrer Frage: Sie können eine Vergleicher an den Konstruktor eines Priorityqueue. Der Komparator wird die Art und Weise beeinflussen, die Einzelteile bestellt werden.

Ich habe gerade einen Komparator verwenden. Auf diese Weise die Sortierreihenfolge nur in Ihrer Queue verwendet wird, anstatt auf Ihre Klasse gebunden.

Einfach bietet den PriorityQueue eine benutzerdefinierte Comparator<? super E> durch den Konstruktor und die Reihenfolge der Elemente ändern.

Von dem javadocs:

PriorityQueue(int initialCapacity, Comparator<? super E> comparator) 

Um den Vergleicher Kommentare hinzufügen, finden Sie unter:

Collections.reverseOrder();

Die api-Dokumentation auf Priorityqueue sagt: „Der Kopf dieser Warteschlange in Bezug auf die festgelegte Reihenfolge das kleinste Element ist“. So ist die Definition von mindestens subjektiv basierend auf Ihren spezifischen Ordnung, weshalb Sie die Möglichkeit, einen Komparator bereitzustellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top