Java PriorityQueue

V tej vadnici bomo s pomočjo primerov spoznali razred PriorityQueue okvira zbirk Java.

PriorityQueueRazred zagotavlja funkcionalnost kup strukture podatkov.

Izvaja vmesnik Queue.

Za razliko od običajnih čakalnih vrst se prednostni elementi čakalne vrste pridobijo v razvrščenem vrstnem redu.

Recimo, da želimo pridobiti elemente v naraščajočem vrstnem redu. V tem primeru bo glava prednostne čakalne vrste najmanjši element. Ko je ta element pridobljen, bo naslednji najmanjši element glava čakalne vrste.

Pomembno je vedeti, da elementov prednostne čakalne vrste ni mogoče razvrstiti. Vendar se elementi vedno pridobijo v razvrščenem vrstnem redu.

Ustvarjanje PriorityQueue

Če želite ustvariti prednostno vrsto, moramo uvoziti java.util.PriorityQueuepaket. Ko uvozimo paket, lahko v Javi ustvarimo prednostno vrsto.

 PriorityQueue numbers = new PriorityQueue(); 

Tu smo ustvarili prednostno vrsto brez kakršnih koli argumentov. V tem primeru je glava prednostne čakalne vrste najmanjši element čakalne vrste. In elementi se v čakalni vrsti odstranijo v naraščajočem vrstnem redu.

Razporeditev elementov pa lahko prilagodimo s pomočjo Comparatorvmesnika. O tem bomo izvedeli kasneje v tej vadnici.

Metode PriorityQueue

PriorityQueueRazred zagotavlja izvajanje vseh metod, ki so prisotne v Queuevmesniku.

Vstavite elemente v PriorityQueue

  • add()- Vstavi določen element v čakalno vrsto. Če je vrsta polna, vrže izjemo.
  • offer()- Vstavi določen element v čakalno vrsto. Če je vrsta polna, se vrne false.

Na primer

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

Izhod

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

Tu smo ustvarili prednostno vrsto z imenom številke. V čakalno vrsto smo vstavili 4 in 2.

Čeprav je 4 vstavljeno pred 2, je glava čakalne vrste 2. To je zato, ker je glava prednostne čakalne vrste najmanjši element čakalne vrste.

Nato smo v vrsto vstavili 1. Čakalna vrsta je zdaj preurejena tako, da najmanjši element 1 shrani v glavo čakalne vrste.

Dostopite do elementov PriorityQueue

Za dostop do elementov iz prednostne čakalne vrste lahko uporabimo peek()metodo. Ta metoda vrne glavo čakalne vrste. Na primer

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

Izhod

 PriorityQueue: (1, 4, 2) Dostopni element: 1 

Odstranite elemente PriorityQueue

  • remove() - odstrani navedeni element iz čakalne vrste
  • poll() - vrne in odstrani glavo čakalne vrste

Na primer

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

Izhod

PriorityQueue: (1, 4, 2) Ali je element 2 odstranjen? true Odstranjeni element z uporabo ankete (): 1

Iteracija nad prioritetno vrsto

Za iteracijo elementov prednostne čakalne vrste lahko uporabimo iterator()metodo. Za uporabo te metode moramo java.util.Iteratorpaket uvoziti . Na primer

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

Izhod

 PriorityQueue z uporabo iteratorja (): 1, 4, 2, 

Druge metode PriorityQueue

Metode Opisi
contains(element) Išče čakalno vrsto prioritet za navedeni element. Če je element najden, se vrne true, če ne, se vrne false.
size() Vrne dolžino prednostne čakalne vrste.
toArray() Pretvori prednostno vrsto v matriko in jo vrne.

Primerjalnik vrst prioritet

V vseh zgornjih primerih so elementi prednostne čakalne vrste pridobljeni v naravnem vrstnem redu (naraščajoči vrstni red). Vendar lahko to naročilo prilagodimo.

Za to moramo ustvariti svoj primerjalni razred, ki izvaja Comparatorvmesnik. Na primer

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

Izhod

 PriorityQueue: (4, 3, 1, 2) 

V zgornjem primeru smo ustvarili prednostno vrsto, ki kot argument posreduje razred CustomComparator.

Razred CustomComparator izvaja Comparatorvmesnik.

Nato compare()metodo preglasimo . Metoda zdaj povzroči, da je glava elementa največje število.

Če želite izvedeti več o primerjalniku, obiščite Java Comparator.

Zanimive Članki...