Maison >Java >javaDidacticiel >Comment puis-je réaliser un tri personnalisé dans une PriorityQueue Java ?

Comment puis-je réaliser un tri personnalisé dans une PriorityQueue Java ?

DDD
DDDoriginal
2024-12-22 21:32:25736parcourir

How Can I Achieve Custom Sorting in a Java PriorityQueue?

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 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn