Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Java

Java PriorityQueue : Fondamentaux, Opérations et Tri Personnalisé

Java PriorityQueue

Explorez la classe PriorityQueue du framework de collections Java à travers des exemples clairs et des guides de bonnes pratiques.

La classe PriorityQueue implémente la structure de données tas (heap) et satisfait l'interface Queue, offrant une récupération efficace des éléments basée sur la priorité plutôt que sur l'ordre d'insertion.


Création d'une PriorityQueue

Commencez par importer java.util.PriorityQueue :

import java.util.PriorityQueue;
PriorityQueue<Integer> numbers = new PriorityQueue<>();

Cette configuration par défaut utilise l'ordre naturel (croissant). Vous pouvez personnaliser l'ordre en fournissant un Comparator lors de la construction de la file.


Méthodes Clés de PriorityQueue

Toutes les méthodes définies dans l'interface Queue sont disponibles, plus quelques opérations spécifiques aux files de priorité.


Insertion d'Éléments

Exemple :

import java.util.PriorityQueue;
class Main {
    public static void main(String[] args) {
        PriorityQueue<Integer> numbers = new PriorityQueue<>();
        numbers.add(4);
        numbers.add(2);
        System.out.println("PriorityQueue: " + numbers);
        numbers.offer(1);
        System.out.println("PriorityQueue Mise à Jour: " + numbers);
    }
}

Sortie

PriorityQueue: [2, 4] PriorityQueue Mise à Jour: [1, 4, 2]

Même si 4 a été ajouté avant 2, la tête reste 2 car c'est l'élément le plus petit. L'ajout de 1 réorganise la file pour que 1 devienne la tête.


Accès aux Éléments

Utilisez peek() pour voir la tête sans la supprimer :

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);
        int number = numbers.peek();
        System.out.println("Élément Accédé: " + number);
    }
}

Sortie

PriorityQueue: [1, 4, 2] Élément Accédé: 1

Suppression d'Éléments

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);
        boolean result = numbers.remove(2);
        System.out.println("L'élément 2 est-il supprimé? " + result);
        int number = numbers.poll();
        System.out.println("Élément Supprimé avec poll(): " + number);
    }
}

Sortie

PriorityQueue: [1, 4, 2] L'élément 2 est-il supprimé? true Élément Supprimé avec poll(): 1

Itération sur une PriorityQueue

Itérez avec iterator() (nécessite java.util.Iterator) :

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("PriorityQueue avec iterator(): ");
        Iterator<Integer> iterate = numbers.iterator();
        while (iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

Sortie

PriorityQueue avec iterator(): 1, 4, 2,

Méthodes Supplémentaires

MéthodeDescription
contains(element)Retourne true si l'élément existe dans la file.
size()Retourne le nombre d'éléments dans la file.
toArray()Convertit la file en tableau.

Tri Personnalisé avec Comparator

Pour inverser l'ordre naturel ou implémenter toute priorité personnalisée, fournissez un Comparator lors de la création de la file :

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 a, Integer b) {
        return b.compareTo(a); // ordre inverse
    }
}

Sortie

PriorityQueue: [4, 3, 1, 2]

Le comparateur personnalisé assure que la tête est l'élément le plus grand. Pour plus de détails, consultez l'API Java Comparator.

Java

  1. Maîtriser les opérateurs Java : Types, syntaxe et exemples pratiques
  2. Commentaires Java : Types, utilisation et bonnes pratiques
  3. Maîtriser la boucle for améliorée en Java : Syntaxe, exemples et bonnes pratiques
  4. Maîtriser les chaînes de caractères en Java : Création, méthodes et bonnes pratiques
  5. Maîtriser les interfaces Java : concepts, implémentation et bonnes pratiques
  6. Maîtriser les classes internes anonymes en Java : définition, syntaxe et exemples pratiques
  7. Maîtriser le try-with-resources Java : gestion automatique des ressources expliquée
  8. Annotations Java expliquées : types, placement et exemples pratiques
  9. Assertions Java : guide pratique pour détecter les bugs et assurer la fiabilité du code