Java PriorityQueue

În acest tutorial, vom afla despre clasa PriorityQueue din cadrul colecțiilor Java cu ajutorul exemplelor.

PriorityQueueClasa asigură funcționalitatea structurii de date heap.

Implementează interfața Queue.

Spre deosebire de cozile normale, elementele de coadă prioritare sunt recuperate în ordine sortată.

Să presupunem că vrem să preluăm elemente în ordine crescătoare. În acest caz, capul cozii de prioritate va fi cel mai mic element. Odată ce acest element este recuperat, cel mai mic element următor va fi capul cozii.

Este important să rețineți că elementele unei cozi prioritare pot să nu fie sortate. Cu toate acestea, elementele sunt întotdeauna recuperate în ordine sortată.

Crearea PriorityQueue

Pentru a crea o coadă prioritară, trebuie să importăm java.util.PriorityQueuepachetul. Odată ce am importat pachetul, iată cum putem crea o coadă prioritară în Java.

 PriorityQueue numbers = new PriorityQueue(); 

Aici, am creat o coadă de prioritate fără niciun argument. În acest caz, capul cozii prioritare este cel mai mic element al cozii. Și elementele sunt eliminate în ordine crescătoare din coadă.

Cu toate acestea, putem personaliza ordonarea elementelor cu ajutorul Comparatorinterfeței. Vom afla despre asta mai târziu în acest tutorial.

Metode PriorityQueue

PriorityQueueClasa asigură punerea în aplicare a tuturor metodelor prezente în Queueinterfața.

Introduceți elemente în PriorityQueue

  • add()- Inserează elementul specificat în coadă. Dacă coada este plină, aruncă o excepție.
  • offer()- Inserează elementul specificat în coadă. Dacă coada este plină, se întoarce false.

De exemplu,

 import java.util.PriorityQueue; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue numbers = new PriorityQueue(); // Using the add() method numbers.add(4); numbers.add(2); System.out.println("PriorityQueue: " + numbers); // Using the offer() method numbers.offer(1); System.out.println("Updated PriorityQueue: " + numbers); ) ) 

Ieșire

 PriorityQueue: (2, 4) PriorityQueue actualizat: (1, 4, 2) 

Aici, am creat o coadă prioritară numită numere. Am introdus 4 și 2 în coadă.

Deși 4 este introdus înainte de 2, capul cozii este 2. Acest lucru se datorează faptului că capul cozii prioritare este cel mai mic element al cozii.

Am inserat apoi 1 în coadă. Coada este acum rearanjată pentru a stoca cel mai mic element 1 în capul cozii.

Accesați elementele PriorityQueue

Pentru a accesa elemente dintr-o coadă prioritară, putem folosi peek()metoda. Această metodă returnează capul cozii. De exemplu,

 import java.util.PriorityQueue; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue numbers = new PriorityQueue(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.println("PriorityQueue: " + numbers); // Using the peek() method int number = numbers.peek(); System.out.println("Accessed Element: " + number); ) ) 

Ieșire

 PriorityQueue: (1, 4, 2) Element accesat: 1 

Eliminați elementele PriorityQueue

  • remove() - elimină elementul specificat din coadă
  • poll() - returnează și elimină capul cozii

De exemplu,

 import java.util.PriorityQueue; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue numbers = new PriorityQueue(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.println("PriorityQueue: " + numbers); // Using the remove() method boolean result = numbers.remove(2); System.out.println("Is the element 2 removed? " + result); // Using the poll() method int number = numbers.poll(); System.out.println("Removed Element Using poll(): " + number); ) ) 

Ieșire

PriorityQueue: (1, 4, 2) Elementul 2 este eliminat? adevărat Element eliminat Folosind poll (): 1

Iterarea peste o coadă prioritară

Pentru a repeta elementele unei cozi prioritare, putem folosi iterator()metoda. Pentru a utiliza această metodă, trebuie să importăm java.util.Iteratorpachetul. De exemplu,

 import java.util.PriorityQueue; import java.util.Iterator; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue numbers = new PriorityQueue(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.print("PriorityQueue using iterator(): "); //Using the iterator() method Iterator iterate = numbers.iterator(); while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Ieșire

 PriorityQueue folosind iteratorul (): 1, 4, 2, 

Alte metode PriorityQueue

Metode Descrieri
contains(element) Caută coada de prioritate pentru elementul specificat. Dacă elementul este găsit, se întoarce true, dacă nu, se întoarce false.
size() Returnează lungimea cozii de prioritate.
toArray() Convertește o coadă de prioritate într-o matrice și o returnează.

Comparator PriorityQueue

În toate exemplele de mai sus, elementele de coadă prioritare sunt recuperate în ordinea naturală (ordine crescătoare). Cu toate acestea, putem personaliza această comandă.

Pentru aceasta, trebuie să creăm propria noastră clasă de comparare care implementează Comparatorinterfața. De exemplu,

 import java.util.PriorityQueue; import java.util.Comparator; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue 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 ( @Override public int compare(Integer number1, Integer number2) ( int value = number1.compareTo(number2); // elements are sorted in reverse order if (value> 0) ( return -1; ) else if (value < 0) ( return 1; ) else ( return 0; ) ) ) 

Ieșire

 PriorityQueue: (4, 3, 1, 2) 

În exemplul de mai sus, am creat o coadă prioritară care trece clasa CustomComparator ca argument.

Clasa CustomComparator implementează Comparatorinterfața.

Apoi, anulăm compare()metoda. Metoda face acum ca capul elementului să fie cel mai mare număr.

Pentru a afla mai multe despre comparator, accesați Java Comparator.

Articole interesante...