In einer Methode erhalte ich ein generisches object E extends Comparable<E>
als Argument. Jetzt möchte ich zwei Prioritätswarteschlangen erstellen. Eine, die das von E und einer anderen Warteschlange verwendete comparator
verwendet, das das Gegenteil von comparator
verwendet von E verwendet (dh wenn E '& lt;' verwendet, muss die zweite Warteschlange '& gt; = ').
Bitte hep mir, wie man zwei solche Warteschlangen erstellt.
Ich bekomme den Fehler, dass reverseOrder
nicht anwendbar ist.
bitte helfen
Ihr Objekt E
erweitert java.lang.Comparable,
, aber es ist kein java.util.Comparator
.
Erstellen Sie Ihre erste Queue ohne Comparator und Sie erhalten die Reihenfolge in Ihrer compareTo
-Funktion und erstellen dann eine java.util.Comparator
, die den Vergleich in umgekehrter Reihenfolge durchführt (rufen Sie einfach a.compareTo (b) auf und negieren Sie dann die Ergebnis) und erstellen Sie Ihre zweite Warteschlange mit diesem Komparator.
Das einzige Argument von Collections .reverseOrder ist ein Vergleicher und keine Sammlung. Für Ihren Code verwenden Sie einfach reverseOrder ohne ein Argument. Sie müssen auch eine Nicht-Null-Initialgröße verwenden. Der folgende Code wird funktionieren.
%Vor%Unter Programm zeigt, wie es geht.
Ich habe StringLengthComparator
, das basierend auf der Stringlänge vergleicht. Mit Collections.reverseOrder
habe ich eine Warteschlange erstellt, die umgekehrt angeordnet ist und eine andere Warteschlange, die korrekt geordnet ist.
Es wird Ausgabe
gedruckt %Vor%Tags und Links java generics heap priority-queue comparator