Heim >Java >javaLernprogramm >Wie kann ich eine benutzerdefinierte Sortierung in einer Java PriorityQueue erreichen?
Benutzerdefinierte Sortierreihenfolge in PriorityQueue
PriorityQueue, eine Java-Sammlungsklasse, bietet einen Standardsortiermechanismus, der Elemente basierend auf ihrer Reihenfolge in aufsteigender Reihenfolge sortiert natürliche Ordnung. Es ist jedoch möglich, dieses Sortierverhalten anzupassen und nach bestimmten Kriterien zu sortieren.
PriorityQueue nach Wunsch sortieren lassen
Um eine benutzerdefinierte Sortierung in PriorityQueue zu erreichen, verwenden Sie den Konstruktor Überlastung, die einen Komparator benötigt super E> Komparator als Argument. Der Komparator vergleicht Elemente und bestimmt ihre Reihenfolge. Um beispielsweise Strings nach ihrer Länge in aufsteigender Reihenfolge zu sortieren:
Comparator<String> comparator = (x, y) -> x.length() - y.length(); PriorityQueue<String> queue = new PriorityQueue<>(comparator);
Offer vs. Add Methods
PriorityQueue bietet zwei Methoden zum Hinzufügen von Elementen: offer( ) und add(). Obwohl sie in der Funktionalität ähnlich sind, weisen sie einen subtilen Unterschied auf. offer() gibt true zurück, wenn das Element erfolgreich hinzugefügt wurde, und false, wenn die Warteschlange voll ist. Im Gegensatz dazu fügt add() das Element direkt zur Warteschlange hinzu und löst eine IllegalStateException aus, wenn die Warteschlange voll ist.
Im Fall von PriorityQueue, das unbegrenzt ist, sind beide Methoden gleichwertig. In begrenzten Prioritätswarteschlangen kann offer() jedoch verwendet werden, um zu prüfen, ob das Element hinzugefügt werden kann, bevor versucht wird, es in die Warteschlange einzureihen.
Beispiel: Zeichenfolgenlängensortierung
Betrachten Sie das folgende Beispiel, in dem Sie eine PriorityQueue erstellen möchten, die Strings basierend auf ihren sortiert Länge:
public class StringLengthComparator implements Comparator<String> { @Override public int compare(String x, String y) { return x.length() - y.length(); } } public class PriorityTest { public static void main(String[] args) { PriorityQueue<String> queue = new PriorityQueue<>(new StringLengthComparator()); queue.offer("medium"); queue.offer("short"); queue.offer("very long indeed"); while (!queue.isEmpty()) { System.out.println(queue.poll()); } } }
Ausgabe:
short medium very long indeed
Dieses Beispiel zeigt, wie man einen benutzerdefinierten Komparator definiert und den PriorityQueue-Konstruktor verwendet, um eine Sortierung basierend auf der String-Länge zu erreichen.
Das obige ist der detaillierte Inhalt vonWie kann ich eine benutzerdefinierte Sortierung in einer Java PriorityQueue erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!