English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriel de base Java

Contrôle de flux Java

Java Tableau

Java Programmation Orientée Objet (I)

Java Programmation Orientée Objet (II)

Java Programmation Orientée Objet (III)

Gestion des exceptions Java

Java Liste (List)

Java Queue (file d'attente)

Java Map Collection

Java Set Collection

Java Entrée/Sortie (I/O)

Java Reader/Writer

Autres sujets Java

PriorityQueue Java

Dans ce tutoriel, nous allons apprendre la classe PriorityQueue du cadre de collections Java à l'aide d'exemples.

La classe PriorityQueue fournit les fonctionnalités de la structure de données pile.

Elle implémenteInterface Queue.

Contrairement à la file d'attente ordinaire, les éléments de la file d'attente prioritaire sont recherchés dans l'ordre de tri.

Supposons que nous voulions rechercher les éléments en ordre croissant. Dans ce cas, la tête de la file d'attente prioritaire est l'élément le plus petit. Une fois cet élément recherché, le prochain élément le plus petit deviendra la tête de la file.

Il convient de noter que les éléments de la file d'attente prioritaire peuvent ne pas être triés. Cependant, les éléments sont toujours recherchés dans l'ordre de tri.

Créer PriorityQueue

为了创建优先级队列,我们必须导入java.util.PriorityQueue包。导入程序包后,可以使用以下方法在Java中创建优先级队列。

PriorityQueue<Integer> numbers = new PriorityQueue<>();

Pour créer une file d'attente prioritaire, nous devons importer le paquet java.util.PriorityQueue. Après avoir importé le paquet, nous pouvons utiliser les méthodes suivantes pour créer une file d'attente prioritaire en Java.

Ici, nous avons créé une file d'attente prioritaire sans aucun paramètre. Dans ce cas, la tête de la file d'attente prioritaire est l'élément le plus petit de la file. Les éléments seront retirés de la file en ordre croissant.

Mais nous pouvons personnaliser l'ordre des éléments à l'aide de l'interface Comparator. Nous en parlerons plus tard dans ce tutoriel.

Méthodes de PriorityQueue

La classe PriorityQueue fournit l'implémentation de toutes les méthodes présentes dans l'interface Queue.

  • Insère un élément dans la PriorityQueue - add()

  • Insère l'élément spécifié dans la file. Si la file est pleine, lève une exception. - offer()

Par exemple,

import java.util.PriorityQueue;
class Main {
    public static void main(String[] args) {
        //Création d'une file d'attente prioritaire
        PriorityQueue<Integer> numbers = new PriorityQueue<>();
        //Insère l'élément spécifié dans la file. Si la file est pleine, retourne false.
        numbers.add(4);
        numbers.add(2);
        System.out.println("PriorityQueue : " + numbers);}}
        //Utilisation de la méthode add()
        Utilisation de la méthode offer()1);
        numbers.offer( + numbers);}}
    }
}

Output result

PriorityQueue: [2, 4]
System.out.println("PriorityQueue mise à jour : "1, 4, 2]

PriorityQueue mise à jour : [4Et ici, nous avons créé une file d'attente prioritaire nommée numbers. Nous avons déjà2inséré dans la file.

Bien que4a été inséré dans2Avant, mais la tête de la file était2. C'est parce que la tête de la file d'attente prioritaire est l'élément le plus petit de la file.

Puis, nous allons1Maintenant, nous allons1Stocké au début de la file.

Accéder à un élément de la PriorityQueue

Pour accéder à un élément de la file d'attente prioritaire, nous pouvons utiliser la méthode peek(). Cette méthode retourne l'élément au début de la file. Par exemple,

import java.util.PriorityQueue;
class Main {
    public static void main(String[] args) {
        // 创建优先级队列
        PriorityQueue<Integer> numbers = new PriorityQueue<>();
        numbers.add(4);
        numbers.add(2);
        numbers.add(1);
        System.out.println("PriorityQueue : " + numbers);}}
        //Utilisation de la méthode peek()
        int number = numbers.peek();
        System.out.println("Accéder à un élément : " + number);
    }
}

Output result

PriorityQueue: [1, 4, 2]
Accéder à un élément: 1

Supprime un élément de la PriorityQueue

  • remove() - Supprime l'élément spécifié de la file

  • poll() - Retourne et supprime l'élément au début de la file

Par exemple,

import java.util.PriorityQueue;
class Main {
    public static void main(String[] args) {
        // Création d'une file d'attente prioritaire
        PriorityQueue<Integer> numbers = new PriorityQueue<>();
        numbers.add(4);
        numbers.add(2);
        numbers.add(1);
        System.out.println("PriorityQueue : " + numbers);}}
        //Utilisation de la méthode remove()
        boolean result = numbers.remove(2);
        System.out.println("Élément2Est-ce que l'élément a été supprimé ? " + result);
        //Utilisation de la méthode poll()
        int number = numbers.poll();
        System.out.println("L'élément supprimé en utilisant poll() : " + number);
    }
}

Output result

PriorityQueue: [1, 4, 2]
Élément2Est-ce que l'élément a été supprimé ? true
Élément supprimé en utilisant poll() : 1

Parcourir PriorityQueue

Pour parcourir les éléments de la file d'attente prioritaire, nous pouvons utiliser la méthode iterator(). Pour utiliser cette méthode, nous devons importer le paquet java.util.Iterator. Par exemple,

import java.util.PriorityQueue;
import java.util.Iterator;
class Main {
    public static void main(String[] args) {
        //创建优先级队列
        PriorityQueue<Integer> numbers = new PriorityQueue<>();
        numbers.add(4);
        numbers.add(2);
        numbers.add(1);
        System.out.print("Utilisation de iterator() pour parcourir PriorityQueue : ");
        //Utilisation de la méthode iterator()
        Iterator<Integer> iterate = numbers.iterator();
        while(iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

Output result

Parcourir PriorityQueue en utilisant iterator() : 1, 4, 2,

Autres méthodes de PriorityQueue

MéthodeDescription du contenu
contains(element)Recherche de l'élément spécifié dans la file d'attente prioritaire. Si l'élément est trouvé, retourne true, sinon retourne false.
size()Retourne la longueur de la file d'attente prioritaire.
toArray()Convertit la file d'attente prioritaire en tableau et la retourne.

Comparateur (comparator) de PriorityQueue

Dans tous les exemples ci-dessus, les éléments de la file d'attente prioritaire sont récupérés dans l'ordre naturel (croissant). Cependant, nous pouvons définir cette ordre nous-mêmes.

Pour cela, nous devons créer notre propre classe comparator, qui implémente l'interface Comparator. Par exemple

import java.util.PriorityQueue;
import java.util.Comparator;
class Main {
    public static void main(String[] args) {
        //创建优先级队列
        PriorityQueue<Integer> numbers = new PriorityQueue<>(new CustomComparator());
        numbers.add(4);
        numbers.add(2);
        numbers.add(1);
        numbers.add(3);
        System.out.print("PriorityQueue: " + numbers);}}
    }
}
class CustomComparator implements Comparator<Integer> {
    @Override
    public int compare(Integer number1, Integer number2) {
        int value =  number1.compareTo(number2);
        //The elements are sorted in reverse order
        if (value > 0) {
            return -1;
        }
        else if (value < 0) {
            return 1;
        }
        else {
            return 0;
        }
    }
}

Output result

PriorityQueue: [4, 3, 1, 2]

In the above example, we created a priority queue and passed the CustomComparator class as a parameter.

The CustomComparator class implements the Comparator interface.

Then, we rewrite the compare() method. This method now makes the head of the element the largest number.