Maison >Java >javaDidacticiel >Comment puis-je réaliser un tri personnalisé dans une PriorityQueue Java ?
Ordre de tri personnalisé dans PriorityQueue
PriorityQueue, une classe de collection Java, fournit un mécanisme de tri par défaut qui classe les éléments par ordre croissant en fonction de leur ordre naturel. Cependant, il est possible de personnaliser ce comportement de tri et de trier selon des critères spécifiques.
Obtenir que PriorityQueue trie comme souhaité
Pour réaliser un tri personnalisé dans PriorityQueue, utilisez le constructeur surcharge qui prend un Comparator super E> comparateur comme argument. Le comparateur compare les éléments et détermine leur ordre. Par exemple, pour trier les chaînes en fonction de leur longueur par ordre croissant :
Comparator<String> comparator = (x, y) -> x.length() - y.length(); PriorityQueue<String> queue = new PriorityQueue<>(comparator);
Offre vs. Ajouter des méthodes
PriorityQueue propose deux méthodes pour ajouter des éléments : offer( ) et ajouter(). Bien que leurs fonctionnalités soient similaires, ils présentent une différence subtile. offer() renvoie true si l'élément est ajouté avec succès et false si la file d'attente est pleine. En revanche, add() ajoute directement l'élément à la file d'attente et lève une IllegalStateException si la file d'attente est pleine.
Dans le cas de PriorityQueue, qui est illimité, les deux méthodes sont équivalentes. Cependant, dans les files d'attente à priorité limitée, offer() peut être utilisé pour vérifier si l'élément peut être ajouté avant de tenter de le mettre en file d'attente.
Exemple : Tri de la longueur des chaînes
Prenons l'exemple suivant dans lequel vous souhaitez créer une PriorityQueue qui trie les chaînes en fonction de leur length :
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()); } } }
Sortie :
short medium very long indeed
Cet exemple montre comment définir un comparateur personnalisé et utiliser le constructeur PriorityQueue pour effectuer un tri basé sur la longueur de la chaîne.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!