logo

Vmesnik čakalne vrste v Javi

Vmesnik Queue je prisoten v java.util paket in podaljšuje Zbirni vmesnik se uporablja za shranjevanje elementov, ki bodo obdelani v vrstnem redu FIFO (prvi prisoten, prvi ven). Je urejen seznam objektov, njegova uporaba pa je omejena na vstavljanje elementov na konec seznama in brisanje elementov z začetka seznama (tj.), sledi FIFO ali načelo prvi vstopi prvi ven.

Queue-Deque-PriorityQueue-In-Java



Ker je čakalna vrsta vmesnik, potrebuje konkreten razred za deklaracijo in najpogostejši razredi so PriorityQueue in LinkedList v Javi. Upoštevajte, da nobena od teh izvedb ni varna za niti. PriorityBlockingQueue je ena alternativna izvedba, če je potrebna nitno varna izvedba.

Izjava: Vmesnik čakalne vrste je deklariran kot:

public interface Queue extends Collection>

Ustvarjanje predmetov čakalne vrste: Od Čakalna vrsta je vmesnik , objektov vrste čakalna vrsta ni mogoče ustvariti. Za ustvarjanje predmeta vedno potrebujemo razred, ki razširi ta seznam. In tudi po uvedbi Generiki v Javi 1.5 je mogoče omejiti vrsto predmeta, ki se lahko shrani v čakalno vrsto. To tipsko varno čakalno vrsto je mogoče definirati kot:



// Obj is the type of the object to be stored in Queue  Queue queue = new PriorityQueue ();>

V Javi je vmesnik Queue podvrsta vmesnika Collection in predstavlja zbirko elementov v določenem vrstnem redu. Sledi načelu prvi vstopi, prvi ven (FIFO), kar pomeni, da se elementi pridobijo v vrstnem redu, v katerem so bili dodani v čakalno vrsto.

Vmesnik Queue ponuja več metod za dodajanje, odstranjevanje in pregledovanje elementov v čakalni vrsti. Tukaj je nekaj najpogosteje uporabljenih metod:

add(element): doda element na zadnji del čakalne vrste. Če je čakalna vrsta polna, sproži izjemo.



ponudba(element): doda element na zadnji del čakalne vrste. Če je čakalna vrsta polna, vrne false.

remove(): odstrani in vrne element na začetku čakalne vrste. Če je čakalna vrsta prazna, sproži izjemo.

poll(): odstrani in vrne element na začetku čakalne vrste. Če je čakalna vrsta prazna, vrne nič.

element(): vrne element na začetku čakalne vrste, ne da bi ga odstranil. Če je čakalna vrsta prazna, sproži izjemo.

peek(): vrne element na začetku čakalne vrste, ne da bi ga odstranil. Če je čakalna vrsta prazna, vrne nič.

Vmesnik Queue izvaja več razredov v Javi, vključno z LinkedList, ArrayDeque in PriorityQueue. Vsak od teh razredov ponuja različne izvedbe vmesnika čakalne vrste z različnimi karakteristikami in funkcijami delovanja.

Na splošno je vmesnik čakalne vrste uporabno orodje za upravljanje zbirk elementov v določenem vrstnem redu in se pogosto uporablja v številnih različnih aplikacijah in panogah.

primer:

Java




import> java.util.LinkedList;> import> java.util.Queue;> public> class> QueueExample {> >public> static> void> main(String[] args) {> >Queue queue =>new> LinkedList();> >// add elements to the queue> >queue.add(>'apple'>);> >queue.add(>'banana'>);> >queue.add(>'cherry'>);> >// print the queue> >System.out.println(>'Queue: '> + queue);> >// remove the element at the front of the queue> >String front = queue.remove();> >System.out.println(>'Removed element: '> + front);> >// print the updated queue> >System.out.println(>'Queue after removal: '> + queue);> >// add another element to the queue> >queue.add(>'date'>);> >// peek at the element at the front of the queue> >String peeked = queue.peek();> >System.out.println(>'Peeked element: '> + peeked);> >// print the updated queue> >System.out.println(>'Queue after peek: '> + queue);> >}> }>

>

>

Izhod

Queue: [apple, banana, cherry] Removed element: apple Queue after removal: [banana, cherry] Peeked element: banana Queue after peek: [banana, cherry, date]>

primer: Čakalna vrsta

Java




// Java program to demonstrate a Queue> import> java.util.LinkedList;> import> java.util.Queue;> public> class> QueueExample {> >public> static> void> main(String[] args)> >{> >Queue q> >=>new> LinkedList();> >// Adds elements {0, 1, 2, 3, 4} to> >// the queue> >for> (>int> i =>0>; i <>5>; i++)> >q.add(i);> >// Display contents of the queue.> >System.out.println(>'Elements of queue '> >+ q);> >// To remove the head of queue.> >int> removedele = q.remove();> >System.out.println(>'removed element-'> >+ removedele);> >System.out.println(q);> >// To view the head of queue> >int> head = q.peek();> >System.out.println(>'head of queue-'> >+ head);> >// Rest all methods of collection> >// interface like size and contains> >// can be used with this> >// implementation.> >int> size = q.size();> >System.out.println(>'Size of queue-'> >+ size);> >}> }>

>

>

Izhod

Elements of queue [0, 1, 2, 3, 4] removed element-0 [1, 2, 3, 4] head of queue-1 Size of queue-4>

Operacije na vmesniku čakalne vrste

Poglejmo, kako izvesti nekaj pogosto uporabljenih operacij v čakalni vrsti z uporabo Razred prednostne čakalne vrste .

java primerjava

1. Dodajanje elementov: Za dodajanje elementa v čakalno vrsto lahko uporabimo metoda add(). . Vrstni red vstavljanja se ne ohrani v PriorityQueue. Elementi so shranjeni na podlagi prednostnega vrstnega reda, ki je privzeto naraščajoč.

Primer

Java




// Java program to add elements> // to a Queue> import> java.util.*;> public> class> GFG {> >public> static> void> main(String args[])> >{> >Queue pq =>new> PriorityQueue();> >pq.add(>'Geeks'>);> >pq.add(>'For'>);> >pq.add(>'Geeks'>);> >System.out.println(pq);> >}> }>

>

>

Izhod

[For, Geeks, Geeks]>

2. Odstranjevanje elementov: Za odstranitev elementa iz čakalne vrste lahko uporabimo odstrani(). Če je takšnih objektov več, se prvi pojavitev predmeta odstrani. Poleg tega se metoda poll() uporablja tudi za odstranitev glave in njeno vrnitev.

Primer

Java




// Java program to remove elements> // from a Queue> import> java.util.*;> public> class> GFG {> >public> static> void> main(String args[])> >{> >Queue pq =>new> PriorityQueue();> >pq.add(>'Geeks'>);> >pq.add(>'For'>);> >pq.add(>'Geeks'>);> >System.out.println(>'Initial Queue '> + pq);> >pq.remove(>'Geeks'>);> >System.out.println(>'After Remove '> + pq);> >System.out.println(>'Poll Method '> + pq.poll());> >System.out.println(>'Final Queue '> + pq);> >}> }>

>

>

Izhod

Initial Queue [For, Geeks, Geeks] After Remove [For, Geeks] Poll Method For Final Queue [Geeks]>

3. Ponavljanje čakalne vrste: Obstaja več načinov za ponavljanje po čakalni vrsti. Najbolj znan način je pretvorba čakalne vrste v matriko in prečkanje z uporabo zanke for. Vendar pa ima čakalna vrsta tudi vgrajen iterator, ki se lahko uporablja za ponavljanje skozi čakalno vrsto.

Primer

Java




// Java program to iterate elements> // to a Queue> import> java.util.*;> public> class> GFG {> >public> static> void> main(String args[])> >{> >Queue pq =>new> PriorityQueue();> >pq.add(>'Geeks'>);> >pq.add(>'For'>);> >pq.add(>'Geeks'>);> >Iterator iterator = pq.iterator();> >while> (iterator.hasNext()) {> >System.out.print(iterator.next() +>' '>);> >}> >}> }>

>

>

Izhod

For Geeks Geeks>

Značilnosti čakalne vrste: Sledijo značilnosti čakalne vrste:

  • Čakalna vrsta se uporablja za vstavljanje elementov na konec čakalne vrste in odstranjevanje z začetka čakalne vrste. Sledi konceptu FIFO.
  • Čakalna vrsta Java podpira vse metode vmesnika za zbiranje, vključno z vstavljanjem, brisanjem itd.
  • LinkedList , ArrayBlockingQueue in PriorityQueue so najpogosteje uporabljene izvedbe.
  • Če se na BlockingQueues izvede katera koli ničelna operacija, se vrže izjema NullPointerException.
  • Čakalne vrste, ki so na voljo v paketu java.util, so neomejene čakalne vrste.
  • Čakalne vrste, ki so na voljo v paketu java.util.concurrent, so omejene čakalne vrste.
  • Vse čakalne vrste razen deques podpirajo vstavljanje in odstranjevanje na repu oziroma na čelu čakalne vrste. Deques podpira vstavljanje in odstranjevanje elementov na obeh koncih.

Razredi, ki izvajajo vmesnik čakalne vrste:

1. PriorityQueue: Razred PriorityQueue, ki je implementiran v okvir zbiranja, nam nudi način za obdelavo objektov na podlagi prioritete. Znano je, da čakalna vrsta sledi algoritmu First-In-First-Out, včasih pa je treba elemente čakalne vrste obdelati po prioriteti, takrat pride v poštev PriorityQueue. Poglejmo, kako ustvariti objekt čakalne vrste s tem razredom.

Primer

Java




// Java program to demonstrate the> // creation of queue object using the> // PriorityQueue class> import> java.util.*;> class> GfG {> >public> static> void> main(String args[])> >{> >// Creating empty priority queue> >Queue pQueue> >=>new> PriorityQueue();> >// Adding items to the pQueue> >// using add()> >pQueue.add(>10>);> >pQueue.add(>20>);> >pQueue.add(>15>);> >// Printing the top element of> >// the PriorityQueue> >System.out.println(pQueue.peek());> >// Printing the top element and removing it> >// from the PriorityQueue container> >System.out.println(pQueue.poll());> >// Printing the top element again> >System.out.println(pQueue.peek());> >}> }>

>

>

Izhod

10 10 15>

2. Povezan seznam: LinkedList je razred, ki je implementiran v ogrodju zbirke, ki samo po sebi implementira Primer

Java




// Java program to demonstrate the> // creation of queue object using the> // LinkedList class> import> java.util.*;> class> GfG {> >public> static> void> main(String args[])> >{> >// Creating empty LinkedList> >Queue ll> >=>new> LinkedList();> >// Adding items to the ll> >// using add()> >ll.add(>10>);> >ll.add(>20>);> >ll.add(>15>);> >// Printing the top element of> >// the LinkedList> >System.out.println(ll.peek());> >// Printing the top element and removing it> >// from the LinkedList container> >System.out.println(ll.poll());> >// Printing the top element again> >System.out.println(ll.peek());> >}> }>

>

>

Izhod

10 10 20>

3. PriorityBlockingQueue: Upoštevati je treba, da obe implementaciji, PriorityQueue in LinkedList, nista varni za niti. PriorityBlockingQueue je ena alternativna izvedba, če je potrebna nitno varna izvedba. PriorityBlockingQueue je neomejena čakalna vrsta za blokiranje, ki uporablja ista pravila razvrščanja kot razred PriorityQueue in zaloge, ki blokirajo operacije iskanja.
Ker je neomejen, lahko dodajanje elementov včasih ne uspe zaradi izčrpanosti virov, kar povzroči OutOfMemoryError . Poglejmo, kako ustvariti objekt čakalne vrste s tem razredom.

Primer

Java




// Java program to demonstrate the> // creation of queue object using the> // PriorityBlockingQueue class> import> java.util.concurrent.PriorityBlockingQueue;> import> java.util.*;> class> GfG {> >public> static> void> main(String args[])> >{> >// Creating empty priority> >// blocking queue> >Queue pbq> >=>new> PriorityBlockingQueue();> >// Adding items to the pbq> >// using add()> >pbq.add(>10>);> >pbq.add(>20>);> >pbq.add(>15>);> >// Printing the top element of> >// the PriorityBlockingQueue> >System.out.println(pbq.peek());> >// Printing the top element and> >// removing it from the> >// PriorityBlockingQueue> >System.out.println(pbq.poll());> >// Printing the top element again> >System.out.println(pbq.peek());> >}> }>

>

>

Izhod

10 10 15>

Metode vmesnika čakalne vrste

Vmesnik čakalne vrste podeduje vse metode, ki so prisotne v vmesnik zbirk pri izvajanju naslednjih metod:

Metoda

Opis

dodaj (int indeks, element) Ta metoda se uporablja za dodajanje elementa na določen indeks v čakalni vrsti. Ko je posredovan en sam parameter, preprosto doda element na koncu čakalne vrste.
addAll(indeks, zbirka zbirke) Ta metoda se uporablja za dodajanje vseh elementov v dani zbirki v čakalno vrsto. Ko je posredovan en sam parameter, doda vse elemente dane zbirke na koncu čakalne vrste.
velikost () Ta metoda se uporablja za vrnitev velikosti čakalne vrste.
počisti() Ta metoda se uporablja za odstranitev vseh elementov v čakalni vrsti. Vendar je sklic ustvarjene čakalne vrste še vedno shranjen.
Odstrani() Ta metoda se uporablja za odstranitev elementa s sprednje strani čakalne vrste.
odstrani (indeks) Ta metoda odstrani element iz podanega indeksa. Naslednje elemente (če obstajajo) premakne v levo in zmanjša njihove indekse za 1.
odstrani (element) Ta metoda se uporablja za odstranitev in vrnitev prve pojavitve danega elementa v čakalni vrsti.
get(indeks) Ta metoda vrne elemente z navedenim indeksom.
set(int indeks, element) Ta metoda zamenja elemente z danim indeksom z novim elementom. Ta funkcija vrne element, ki je bil pravkar nadomeščen z novim elementom.
indexOf(element) Ta metoda vrne prvo pojavitev danega elementa oz -1 če element ni prisoten v čakalni vrsti.
lastIndexOf(element) Ta metoda vrne zadnjo pojavitev danega elementa oz -1 če element ni prisoten v čakalni vrsti.
enako (element) Ta metoda se uporablja za primerjavo enakosti danega elementa z elementi čakalne vrste.
hashCode() Ta metoda se uporablja za vrnitev vrednosti hashcode dane čakalne vrste.
je prazno() Ta metoda se uporablja za preverjanje, ali je čakalna vrsta prazna ali ne. Vrne true, če je čakalna vrsta prazna, drugače pa false.
vsebuje (element) Ta metoda se uporablja za preverjanje, ali čakalna vrsta vsebuje dani element ali ne. Vrne true, če čakalna vrsta vsebuje element.
vsebujeVse (zbirka zbirke) Ta metoda se uporablja za preverjanje, ali čakalna vrsta vsebuje vso zbirko elementov.
razvrsti (komparator komp.) Ta metoda se uporablja za razvrščanje elementov čakalne vrste na podlagi podanosti primerjalnik .
logični dodatek (predmet) Ta metoda se uporablja za vstavljanje podanega elementa v čakalno vrsto in vrnitev true po uspehu.
logična ponudba (objekt) Ta metoda se uporablja za vstavljanje določenega elementa v čakalno vrsto.
Anketa predmeta() Ta metoda se uporablja za pridobivanje in odstranjevanje glave čakalne vrste ali vrne ničelno vrednost, če je čakalna vrsta prazna.
Element predmeta () Ta metoda se uporablja za pridobitev glave čakalne vrste, vendar je ne odstrani.
Predmet peek() Ta metoda se uporablja za pridobivanje, vendar ne odstrani glave te čakalne vrste ali vrne ničelno vrednost, če je ta čakalna vrsta prazna.

Prednosti uporabe vmesnika Queue v Javi:

Ohranjanje naročila : Vmesnik Queue omogoča shranjevanje in pridobivanje elementov v določenem vrstnem redu po načelu FIFO (prvi vstopi, prvi ven).

Prilagodljivost : Vmesnik Queue je podvrsta vmesnika Collection, kar pomeni, da se lahko uporablja s številnimi različnimi podatkovnimi strukturami in algoritmi, odvisno od zahtev aplikacije.

nit varnost : Nekatere izvedbe vmesnika Queue, kot je razred java.util.concurrent.ConcurrentLinkedQueue, so varne za niti, kar pomeni, da lahko do njih dostopa več niti hkrati, ne da bi pri tem prišlo do konfliktov.

Izvedba : Vmesnik Queue zagotavlja učinkovite izvedbe za dodajanje, odstranjevanje in pregledovanje elementov, zaradi česar je uporabno orodje za upravljanje zbirk elementov v aplikacijah, ki so kritične za zmogljivost.

Slabosti uporabe vmesnika Queue v Javi:

Omejena funkcionalnost: Vmesnik Queue je zasnovan posebej za upravljanje zbirk elementov v določenem vrstnem redu, kar pomeni, da morda ni primeren za kompleksnejše podatkovne strukture ali algoritme.

Omejitve velikosti: Nekatere izvedbe vmesnika Queue, kot je razred ArrayDeque, imajo fiksno velikost, kar pomeni, da ne morejo rasti preko določenega števila elementov.

Poraba pomnilnika: Odvisno od izvedbe lahko vmesnik čakalne vrste zahteva več pomnilnika kot druge podatkovne strukture, zlasti če mora shraniti dodatne informacije o vrstnem redu elementov.

Kompleksnost : Programerjem začetnikom je vmesnik Queue lahko težaven za uporabo in razumevanje, še posebej, če niso seznanjeni s principi podatkovnih struktur in algoritmov.