Java PriorityQueue

V tomto tutoriáli sa pomocou príkladov dozvieme o triede PriorityQueue rámca kolekcií Java.

PriorityQueueTrieda poskytuje funkčnosť haldy dátové štruktúry.

Implementuje rozhranie fronty.

Na rozdiel od bežných frontov sa prvky prioritných frontov načítajú v zoradenom poradí.

Predpokladajme, že chceme načítať prvky vo vzostupnom poradí. V tomto prípade bude hlava prioritného frontu najmenším prvkom. Po načítaní tohto prvku bude nasledujúcim najmenším prvkom hlava v poradí.

Je dôležité si uvedomiť, že prvky prioritného frontu sa nemusia dať triediť. Elementy sa však vždy načítajú v zoradenom poradí.

Vytvára sa prioritná fronta

Aby sme vytvorili prioritný front, musíme java.util.PriorityQueuebalíček importovať . Po importovaní balíka tu môžeme vytvoriť prioritný front v Jave.

 PriorityQueue numbers = new PriorityQueue(); 

Tu sme vytvorili prioritný front bez akýchkoľvek argumentov. V tomto prípade je hlava prioritného frontu najmenším prvkom frontu. A prvky sa z frontu odstránia vzostupne.

Usporiadanie prvkov však môžeme upraviť pomocou Comparatorrozhrania. O tom sa dozvieme neskôr v tomto návode.

Metódy PriorityQueue

PriorityQueueTrieda poskytuje vykonávanie všetkých metód prítomných v Queuerozhraní.

Vložte prvky do PriorityQueue

  • add()- Vloží zadaný prvok do poradia. Ak je poradie plné, vyvolá to výnimku.
  • offer()- Vloží zadaný prvok do poradia. Ak je poradie plné, vráti sa false.

Napríklad,

 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); ) ) 

Výkon

 PriorityQueue: (2, 4) Aktualizovaná PriorityQueue: (1, 4, 2) 

Tu sme vytvorili prioritný front s názvom čísla. Do fronty sme vložili 4 a 2.

Aj keď je 4 vložené pred 2, hlava frontu je 2. Je to preto, že hlava prioritného frontu je najmenším prvkom frontu.

Potom sme vložili 1 do poradia. Poradie je teraz preskupené tak, aby ukladalo najmenší prvok 1 do čela poradia.

Prístup k prvkom PriorityQueue

Na prístup k prvkom z prioritného frontu môžeme použiť peek()metódu. Táto metóda vráti hlavičku frontu. Napríklad,

 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); ) ) 

Výkon

 Prioritná fronta: (1, 4, 2) Prístup k prvku: 1 

Odstrániť prvky PriorityQueue

  • remove() - odstráni zadaný prvok z frontu
  • poll() - vráti a odstráni hlavu frontu

Napríklad,

 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); ) ) 

Výkon

PriorityQueue: (1, 4, 2) Je prvok 2 odstránený? true Odstránený prvok pomocou poll (): 1

Iterácia cez prioritnú frontu

Na opakovanie prvkov prioritného frontu môžeme použiť túto iterator()metódu. Aby sme mohli použiť túto metódu, musíme java.util.Iteratorbalíček importovať . Napríklad,

 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(", "); ) ) ) 

Výkon

 PriorityQueue pomocou iterátora (): 1, 4, 2, 

Ďalšie metódy PriorityQueue

Metódy Popisy
contains(element) Vyhľadá prioritný rad pre zadaný prvok. Ak sa prvok nájde, vráti sa true, ak nie, vráti sa false.
size() Vráti dĺžku prioritného frontu.
toArray() Skonvertuje prioritný front na pole a vráti ho.

Porovnávač priority

Vo všetkých vyššie uvedených príkladoch sa prioritné prvky frontu načítajú v prirodzenom poradí (vzostupne). Toto objednávanie však môžeme prispôsobiť.

Z tohto dôvodu musíme vytvoriť našu vlastnú komparatívnu triedu, ktorá implementuje Comparatorrozhranie. Napríklad,

 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; ) ) ) 

Výkon

 Prioritná fronta: (4, 3, 1, 2) 

Vo vyššie uvedenom príklade sme vytvorili prioritný front, ktorý ako argument odovzdáva triedu CustomComparator.

Trieda CustomComparator implementuje Comparatorrozhranie.

Potom compare()metódu prepíšeme . Metóda teraz spôsobí, že hlava prvku bude najväčšie číslo.

Ak sa chcete dozvedieť viac informácií o komparátore, navštívte Java Comparator.

Zaujímavé články...