java priority queue tutorial implementation examples
Ta vadnica pojasnjuje Java Priority Queue in s tem povezane koncepte, kot so primerjalna vrsta, Min in Max Priority Queue, skupaj z njegovo izvedbo s primeri:
Struktura podatkov prioritetne čakalne vrste je posebna vrsta, v kateri elementi niso prisotni po vrstnem redu FIFO, ampak glede na naravne elemente ali kateri koli primerjalnik po meri, uporabljen med ustvarjanjem čakalne vrste.
=> Tu si oglejte Vodnik za začetnike Java.
Kaj se boste naučili:
Prednostna vrsta v Javi
V prioritetni vrsti ima sprednji del čakalne vrste najmanj elementov po naravnem vrstnem redu, zadnji pa je usmerjen na največji element v čakalni vrsti.
Primer prednostne čakalne vrste, sestavljene iz številk, je prikazan spodaj.
kako nastaviti selenovo mrežo
Ko je torej element odstranjen iz zgoraj prikazane prednostne čakalne vrste, bo to najmanjši element.
Podobno bodo za abecedno prednostno vrsto upoštevane vrednosti ASCII in elementi čakalne vrste bodo razvrščeni v skladu z vrednostmi ASCII.
Spodaj so navedene nekatere glavne značilnosti PriorityQueue:
- PriorityQueue je nevezana vrsta.
- PriorityQueue ne dovoljuje ničelnih vrednosti.
- Za neprimerljive predmete ne moremo ustvariti prednostne čakalne vrste.
- PriorityQueue podeduje iz razredov, kot so AbstractQueue, AbstractCollection, Collection in Object.
- Glava ali sprednja stran čakalne vrste vsebuje najmanj elementov po naravnem vrstnem redu.
- Izvajanje prioritetne čakalne vrste ni varno pred nitmi. Če želimo sinhroniziran dostop, moramo uporabiti PriorityBlockingQueue.
Razred PriorityQueue podeduje vmesnik Java Queue Interface in je del paketa java.util.
Splošna izjava razreda PriorityQueue je podana spodaj:
public class PriorityQueue extends AbstractQueue implements Serializable
Spodnji diagram prikazuje hierarhijo razredov za razred PriorityQueue.
Časovna zapletenost prednostne čakalne vrste
- Časovna zapletenost prioritetne čakalne vrste za metode vstavljanja (čakanja) in brisanja (odstranjevanja vrste) je O (log (n)).
- Prednostna vrsta ima linearno časovno zapletenost za odstranjevanje in vsebuje metode.
- Metode, ki pridobijo elemente iz prioritetne čakalne vrste, imajo stalno časovno zapletenost.
Primer prednostne čakalne vrste v Javi
Spodnji program prikazuje preprosto PriorityQueue v Javi. Ustvarimo objekt razreda PriorityQueue, mu dodamo vrednosti in nato z Iteratorjem prikažemo vsebino čakalne vrste.
import java.util.*; class Main{ public static void main(String args[]){ PriorityQueue cities_queue=new PriorityQueue(); //initialize the PriorityQueue with values cities_queue.add('Sydney'); cities_queue.add('Venice'); cities_queue.add('New York'); cities_queue.add('California'); cities_queue.add('Melbourne'); //print the head of the PriorityQueue System.out.println('PriorityQueue Head:'+cities_queue.element()); //Define the iterator for PriorityQueue and print its elements System.out.println('
PriorityQueue contents:'); Iterator iter=cities_queue.iterator(); while(iter.hasNext()){ System.out.print(iter.next() + ' '); } } }
Izhod:
Metode API-ja Java Priority Queue
Konstruktorji:
Prototip konstruktorja | Opis | |
---|---|---|
pokukati | E pokukajte () | Vrne glavo čakalne vrste, ne da bi izbrisal element. |
PriorityQueue () | Privzeti konstruktor, ki ustvari objekt PriorityQueue z začetno zmogljivostjo kot 1. | |
PriorityQueue (zbirka c) | Ustvari objekt PriorityQueue z začetnimi elementi iz dane zbirke c. | |
PriorityQueue (int začetna zmogljivost) | Ustvari objekt PriorityQueue z dano 'začetno zmogljivostjo'. Elementi so razvrščeni po naravnem naročilu. | |
PriorityQueue (int začetna zmogljivost, primerjalnik primerjalnika) | Ustvari objekt PriorityQueue z dano 'začetno zmogljivostjo'. Elementi so razvrščeni glede na dano primerjavo. | |
PriorityQueue (PriorityQueue c) | Ustvari objekt PriorityQueue iz drugega predmeta PriorityQueue, ki ga daje c. | |
PriorityQueue (SortedSet c) | Ustvari objekt PriorityQueue iz SortedSet, ki ga poda c. |
Metode
Metoda | Prototip metode | Opis |
---|---|---|
dodajte | logični dodatek (E e) | Doda element e v PriorityQueue. |
jasno | prazno jasno () | Počisti PriorityQueue z brisanjem vseh elementov. |
primerjalnik | Primerjalnik primerjalnik () | Vrne primerjalnik po meri, ki se uporablja za razvrščanje elementov v čakalni vrsti. |
vsebuje | logična vrednost vsebuje (predmet o) | Preveri, ali PriorityQueue vsebuje dani element o. Vrne true, če da. |
iterator | Iteratoriterator () | Metoda za pridobivanje iteratorja za dano PriorityQueue. |
ponudbo | logična ponudba (E e) | Vstavite dani element e v PriorityQueue. |
anketa | E anketa () | Odstrani in vrne glavo čakalne vrste. Vrne nič, če je vrsta prazna. |
Odstrani | logično odstranjevanje (objekt o) | Odstrani primerek danega elementa o, če je prisoten v čakalni vrsti. |
velikost | velikost int () | Vrne velikost ali število elementov v tej prioritetni vrsti. |
toArray | Object [] toArray () | Vrne prikaz matrike dane vrste PriorityQueue. |
toArray | T [] doArray (T [] a) | Vrne prikaz matrike za dano prednostno vrsto z enakim tipom časa izvajanja kot podana matrika a. |
Izvajanje v Javi
Pokažimo zgornje metode PriorityQueue s pomočjo programa Java.
import java.util.*; class Main { public static void main(String args[]) { // Creating empty priority queue PriorityQueue numQueue = new PriorityQueue(); // add elements to numQueue using add() numQueue.add('Five'); numQueue.add('One'); numQueue.add('Seven'); numQueue.add('Three'); numQueue.add('Eleven'); numQueue.add('Nine'); // Print the head element using Peek () method System.out.println('Head element using peek method:' + numQueue.peek()); // Printing all elements System.out.println('
The PriorityQueue elements:'); Iterator iter1 = numQueue.iterator(); while (iter1.hasNext()) System.out.print(iter1.next() + ' '); // remove head with poll () numQueue.poll(); System.out.println('
After removing an element' + 'with poll function:'); Iterator iter2 = numQueue.iterator(); while (iter2.hasNext()) System.out.print(iter2.next() + ' '); // Remove 'Three' using remove () numQueue.remove('Three'); System.out.println('
Element 'Three' with' + ' remove function:'); Iterator iter3 = numQueue.iterator(); while (iter3.hasNext()) System.out.print(iter3.next() + ' '); // Check if an element is present in PriorityQueue using contains() boolean ret_val = numQueue.contains('Five'); System.out.println('
Priority queue contains 'Five' ' + 'or not?: ' + ret_val); // get array equivalent of PriorityQueue with toArray () Object[] numArr = numQueue.toArray(); System.out.println('
Array Contents: '); for (int i = 0; i Izhod:
kako odpreti datoteke jnlp v operacijskem sistemu Windows 8
Prednostna vrsta v Javi 8
Java 8 v razred PriorityQueue doda še eno metodo, tj. 'Spliterator ()'.
Podrobnosti te metode so podane spodaj.
Ime metode: cepilnik
Prototip metode: javni končni spliterator spliterator ()
Opis metode: Ta metoda ustvari spliterator nad elementi PriorityQueue. Ta spliterator je pozno vezan in hiter.
Primerjalnik prioritetnih vrst
Kot že omenjeno, so elementi PriorityQueue naravno urejeni. Če želimo spremeniti vrstni red, moramo določiti primerjalnik in ga uporabiti med ustvarjanjem predmeta PriorityQueue. PriorityQueue nato s tem primerjalnikom naroči njegove elemente.
Spodnji program Java prikazuje uporabo primerjalnika po meri za razvrščanje elementov. V tem programu definiramo nov primerjalnik po meri, znotraj katerega preglasimo metodo primerjanja. Metoda primerjave se uporablja za razvrščanje elementov PriorityQueue glede na dolžino.
import java.util.*; public class Main { public static void main(String[] args) { // A custom comparator that compares two Strings by their length. Comparator customComparator = new Comparator() { @Override public int compare(String s1, String s2) { return s1.length() - s2.length(); } }; // Create a Priority Queue with a custom Comparator PriorityQueue colorsPriorityQueue = new PriorityQueue(customComparator); // Add items to a Priority Queue colorsPriorityQueue.add('Red'); colorsPriorityQueue.add('Green'); colorsPriorityQueue.add('Blue'); colorsPriorityQueue.add('Cyan'); colorsPriorityQueue.add('Magenta'); colorsPriorityQueue.add('Yellow'); // Printing all elements System.out.println('
The PriorityQueue elements with custom Comparator:'); Iterator iter1 = colorsPriorityQueue.iterator(); while (iter1.hasNext()) System.out.print(iter1.next() + ' '); } }
Izhod:
Minimalna čakalna vrsta v Javi
Naravno urejanje prednostne čakalne vrste ima najmanj ali najmanjši element na vrhu čakalne vrste, zato je vrstni red naraščajoč. To se imenuje »Minimalna čakalna vrsta« z naraščajočim vrstnim redom elementov.
Spodnji program Java prikazuje izvajanje čakalne vrste Min Priority v Javi.
import java.util.*; class Main{ public static void main(String args[]){ //declare a PriorityQueue object with default ordering PriorityQueue pq = new PriorityQueue(); //add element to the PriorityQueue pq.add(8); pq.add(6); pq.add(4); pq.add(2); pq.add(12); pq.add(10); //display the min PriorityQueue System.out.println('The min Priority Queue (natural ordering) contents:'); Integer val = null; while( (val = pq.poll()) != null) { System.out.print(val + ' '); } } }
Izhod:
pretvori znak v celo število c ++
Max Priority Queue v Javi
Medtem ko ima čakalna vrsta najmanjše prednosti elemente v naraščajočem vrstnem redu, ima čakalna vrsta z največ prednostnimi elementi elemente v padajočem vrstnem redu, tj.
Spodnji program Java prikazuje Max Priority Queue v Javi.
import java.util.*; class Main{ public static void main(String args[]){ //declare a PriorityQueue object with custom comparator to generate max PQ PriorityQueue pq = new PriorityQueue(new Comparator() { public int compare(Integer lhs, Integer rhs) { if (lhs Izhod:
Kot je prikazano v zgornjem programu, moramo za spremembo naravnega urejanja elementov v prednostni vrsti določiti primerjalnik po meri.
Pogosto zastavljena vprašanja
V # 1) Kakšna je vrsta prioritet v Javi?
Odgovor: Posebna vrsta, v kateri so vsi elementi čakalne vrste razvrščeni po naravnem naročilu ali z uporabo primerjalnika po meri, se imenuje Prioriteta. Ne sledi odredbi FIFO.
V # 2) Kako v Javi nastavim čakalno vrsto Max Priority?
Odgovor: V Java lahko nastavimo Max Priority Queue s primerjalnikom po meri, tako da bo glava čakalne vrste vrnila največji element v čakalni vrsti.
V # 3) Ali čakalna vrsta Prioriteta dovoljuje dvojnike Java?
Odgovor: Da. Priority Queue omogoča podvojene vrednosti.
V # 4) Ali je čakalna vrsta Java Priority največja ali najmanjša?
Odgovor: Prednostna vrsta v Javi je privzeto min Priority queue z naravnim urejanjem. Da bo maksimalen, moramo uporabiti primerjalnik po meri, tako da glava čakalne vrste vrne največji element v čakalni vrsti.
V # 5) Ali je prednostna vrsta razvrščena?
Odgovor: Privzeto je glava čakalne vrste razvrščena, prednostna vrsta pa ima najmanj element kot glavo. Preostali elementi se po potrebi uredijo.
Zaključek
S tem je vadnica o prioritetnih čakalnih vrstah v Javi zaključena. Priority Queue izvaja vmesnik čakalne vrste in je posebna čakalna vrsta, kjer so elementi razvrščeni po naravnem vrstnem redu. Ne sledi odredbi FIFO. Za spremembo naravnega vrstnega reda prednostne vrste lahko uporabimo primerjalnik po meri.
Prednostne čakalne vrste se v glavnem uporabljajo za razporejanje tiskalnika, razporejanje opravil CPU itd. Kop (najmanjša ali največja) se izvaja tudi s prednostnimi čakalnimi vrstami.
=> Preberite serijo Easy Java Training Series.
Priporočeno branje
- Struktura podatkov prioritetne čakalne vrste v C ++ z ilustracijo
- Prednostna vrsta v STL
- Java Queue - metode čakalne vrste, izvedba vrste z primeri
- Struktura podatkov krožne čakalne vrste C ++: implementacija in aplikacije
- Dvostranska čakalna vrsta (Deque) v jeziku C ++ z primeri
- Struktura podatkov čakalne vrste v jeziku C ++ z ilustracijo
- Skladi in čakalne vrste v STL
- JAVA Vadnica za začetnike: 100+ praktičnih Javnih video vadnic