logo

Jonokäyttöliittymä Javassa

Jonon käyttöliittymä on olemassa java.util paketti ja laajentaa Kokoelman käyttöliittymä käytetään pitämään käsiteltävät elementit FIFO-järjestyksessä (First In First Out). Se on järjestetty luettelo objekteista, jonka käyttö rajoittuu elementtien lisäämiseen luettelon loppuun ja elementtien poistamiseen luettelon alusta, eli se seuraa FIFO tai First-in-First-Out -periaatteella.

Queue-Deque-PriorityQueue-In-Java

Rajapintana jono tarvitsee konkreettisen luokan ilmoitusta varten ja yleisimmät luokat ovat PriorityQueue ja LinkedList Javassa. Huomaa, että kumpikaan näistä toteutuksista ei ole säikeen varma. PriorityBlockingQueue on yksi vaihtoehtoinen toteutus, jos säieturvallista toteutusta tarvitaan.



Ilmoitus: Jonon käyttöliittymä on ilmoitettu seuraavasti:

public interface Queue extends Collection>

Jonoobjektien luominen: Siitä asti kun Jonottaa on käyttöliittymä , objekteja ei voida luoda tyyppijonosta. Tarvitsemme aina luokan, joka laajentaa tätä listaa objektin luomiseksi. Ja myös käyttöönoton jälkeen Generics Java 1.5:ssä on mahdollista rajoittaa jonoon tallennettavien objektien tyyppiä. Tämä tyyppiturvallinen jono voidaan määritellä seuraavasti:

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

Javassa Queue-rajapinta on Collection-rajapinnan alatyyppi ja edustaa kokoelmaa elementtejä tietyssä järjestyksessä. Se noudattaa FIFO-periaatetta, mikä tarkoittaa, että elementit haetaan siinä järjestyksessä, jossa ne on lisätty jonoon.

Jono-käyttöliittymä tarjoaa useita menetelmiä jonon elementtien lisäämiseen, poistamiseen ja tarkastamiseen. Tässä on joitain yleisimmin käytetyistä menetelmistä:

add(element): Lisää elementin jonon takaosaan. Jos jono on täynnä, se tekee poikkeuksen.

offer(element): Lisää elementin jonon takaosaan. Jos jono on täynnä, se palauttaa epätosi.

remove(): Poistaa ja palauttaa jonon etuosassa olevan elementin. Jos jono on tyhjä, se tekee poikkeuksen.

poll(): Poistaa ja palauttaa jonon etuosassa olevan elementin. Jos jono on tyhjä, se palauttaa nollan.

element(): Palauttaa jonon alussa olevan elementin poistamatta sitä. Jos jono on tyhjä, se tekee poikkeuksen.

peek(): Palauttaa jonon alussa olevan elementin poistamatta sitä. Jos jono on tyhjä, se palauttaa nollan.

Queue-rajapinnan toteuttavat useat Java-luokat, mukaan lukien LinkedList, ArrayDeque ja PriorityQueue. Jokainen näistä luokista tarjoaa erilaisia ​​​​toteutuksia jonorajapinnasta erilaisilla suorituskykyominaisuuksilla ja ominaisuuksilla.

Kaiken kaikkiaan Queue-käyttöliittymä on hyödyllinen työkalu elementtikokoelmien hallintaan tietyssä järjestyksessä, ja sitä käytetään laajalti monissa eri sovelluksissa ja toimialoilla.

Esimerkki:

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

>

>

Lähtö

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

Esimerkki: Jonottaa

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

>

>

Lähtö

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

Toiminnot jonoliittymässä

Katsotaanpa, kuinka voit suorittaa muutamia usein käytettyjä toimintoja jonossa käyttämällä Priority Queue -luokka .

1. Elementtien lisääminen: Elementin lisäämiseksi jonoon voimme käyttää add()-menetelmä . Lisäysjärjestystä ei säilytetä PriorityQueuessa. Elementit tallennetaan prioriteettijärjestyksen mukaan, joka on oletusarvoisesti nouseva.

Esimerkki

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

>

>

Lähtö

[For, Geeks, Geeks]>

2. Elementtien poistaminen: Elementin poistamiseksi jonosta voimme käyttää Poista() -menetelmä. Jos tällaisia ​​objekteja on useita, objektin ensimmäinen esiintyminen poistetaan. Tämän lisäksi poll()-menetelmää käytetään myös pään poistamiseen ja palauttamiseen.

Esimerkki

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

>

>

Lähtö

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

3. Jonon toistaminen: On olemassa useita tapoja iteroida jonon läpi. Tunnetuin tapa on muuntaa jono taulukoksi ja kulkea for-silmukan avulla. Jonossa on kuitenkin myös sisäänrakennettu iteraattori, jonka avulla voidaan iteroida jonon läpi.

Esimerkki

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() +>' '>);> >}> >}> }>

>

>

Lähtö

For Geeks Geeks>

Jonon ominaisuudet: Seuraavat ovat jonon ominaisuudet:

  • Jonoa käytetään elementtien lisäämiseen jonon loppuun ja se poistetaan jonon alusta. Se noudattaa FIFO-konseptia.
  • Java-jono tukee kaikkia Collection-rajapinnan menetelmiä, mukaan lukien lisääminen, poistaminen jne.
  • LinkedList , ArrayBlockingQueue ja PriorityQueue ovat yleisimmin käytetyt toteutukset.
  • Jos jokin nollatoiminto suoritetaan BlockingQueuesille, NullPointerException heitetään.
  • Java.util-paketissa saatavilla olevat jonot ovat rajoittamattomia jonoja.
  • Java.util.concurrent-paketissa saatavilla olevat jonot ovat rajattuja jonoja.
  • Kaikki jonot paitsi Deques tukevat lisäämistä ja poistamista jonon päähän ja vastaavasti. Deques tukee elementin kiinnittämistä ja poistamista molemmista päistä.

Luokat, jotka toteuttavat jonoliittymän:

1. PriorityQueue: Keräyskehyksessä toteutettu PriorityQueue-luokka tarjoaa meille tavan käsitellä objekteja prioriteetin perusteella. Tiedetään, että jono noudattaa First-In-First-Out-algoritmia, mutta joskus jonon elementit on käsiteltävä prioriteetin mukaan, jolloin PriorityQueue tulee peliin. Katsotaanpa kuinka luodaan jonoobjekti tämän luokan avulla.

Esimerkki

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

>

>

Lähtö

10 10 15>

2. Linkitetty lista: LinkedList on luokka, joka on toteutettu kokoelmakehyksessä, joka toteuttaa luonnostaan Esimerkki

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

>

>

Lähtö

10 10 20>

3. PriorityBlockingQueue: On huomattava, että molemmat toteutukset, PriorityQueue ja LinkedList eivät ole säikeen turvallisia. PriorityBlockingQueue on yksi vaihtoehtoinen toteutus, jos säieturvallista toteutusta tarvitaan. PriorityBlockingQueue on rajoittamaton estojono, joka käyttää samoja järjestyssääntöjä kuin luokka PriorityQueue ja tarvikkeet estävät hakutoiminnot.
Koska se on rajoittamaton, elementtien lisääminen voi joskus epäonnistua resurssien ehtymisen vuoksi OutOfMemoryError . Katsotaanpa kuinka luodaan jonoobjekti tämän luokan avulla.

Esimerkki

Java

jos muuten jos muuten jos 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());> >}> }>

>

>

Lähtö

10 10 15>

Jonokäyttöliittymän menetelmät

Jonoliitäntä perii kaikki menetelmät, jotka ovat olemassa kokoelman käyttöliittymä kun käytät seuraavia menetelmiä:

Menetelmä

Kuvaus

add(int indeksi, elementti) Tätä menetelmää käytetään elementin lisäämiseen jonon tiettyyn hakemistoon. Kun yksi parametri välitetään, se yksinkertaisesti lisää elementin jonon loppuun.
addAll(int index, kokoelmakokoelma) Tätä menetelmää käytetään lisäämään kaikki tietyn kokoelman elementit jonoon. Kun yksi parametri välitetään, se lisää kaikki tietyn kokoelman elementit jonon loppuun.
koko() Tätä menetelmää käytetään palauttamaan jonon koko.
asia selvä() Tätä menetelmää käytetään kaikkien jonon elementtien poistamiseen. Luodun jonon viite tallennetaan kuitenkin edelleen.
Poista() Tätä menetelmää käytetään elementin poistamiseen jonon etuosasta.
poista (int index) Tämä menetelmä poistaa elementin määritetystä hakemistosta. Se siirtää myöhempiä elementtejä (jos sellaisia ​​on) vasemmalle ja pienentää niiden indeksejä yhdellä.
poista (elementti) Tätä menetelmää käytetään tietyn elementin ensimmäisen esiintymän poistamiseen ja palauttamiseen jonossa.
get(int index) Tämä menetelmä palauttaa elementit määritetyllä indeksillä.
joukko (int indeksi, elementti) Tämä menetelmä korvaa tietyn indeksin elementit uudella elementillä. Tämä funktio palauttaa elementin, joka juuri korvattiin uudella elementillä.
indexOf(elementti) Tämä menetelmä palauttaa annetun elementin tai ensimmäisen esiintymän -1 jos elementtiä ei ole jonossa.
lastIndexOf(elementti) Tämä menetelmä palauttaa annetun elementin tai viimeisen esiintymän -1 jos elementtiä ei ole jonossa.
yhtä kuin (elementti) Tätä menetelmää käytetään vertaamaan annetun elementin yhtäläisyyttä jonon elementteihin.
hash koodin() Tätä menetelmää käytetään palauttamaan annetun jonon hashcode-arvo.
on tyhjä() Tätä menetelmää käytetään tarkistamaan, onko jono tyhjä vai ei. Palauttaa tosi, jos jono on tyhjä, muuten false.
sisältää (elementin) Tätä menetelmää käytetään tarkistamaan, sisältääkö jono annetun elementin vai ei. Se palauttaa arvon tosi, jos jono sisältää elementin.
sisältääKaikki (kokoelmakokoelma) Tätä menetelmää käytetään tarkistamaan, sisältääkö jono kaiken elementtikokoelman.
lajittele (vertailu comp) Tällä menetelmällä lajitellaan jonon elementit annetun perusteella vertailija .
boolen lisäys(objekti) Tätä menetelmää käytetään määritetyn elementin lisäämiseen jonoon ja palauttamaan tosi onnistuessaan.
Boolen tarjous (objekti) Tätä menetelmää käytetään määritetyn elementin lisäämiseen jonoon.
Objektikysely() Tätä menetelmää käytetään noutamaan ja poistamaan jonon pää tai palauttamaan nollan, jos jono on tyhjä.
Objektielementti() Tätä menetelmää käytetään jonon pään hakemiseen, mutta ei poistamiseen.
Objektin kurkistus() Tätä menetelmää käytetään tämän jonon pään hakemiseen, mutta se ei poista sitä, tai palauttaa nolla-arvon, jos tämä jono on tyhjä.

Queue-käyttöliittymän käytön edut Javassa:

Tilauksen säilytys : Jono-käyttöliittymä tarjoaa tavan tallentaa ja hakea elementtejä tietyssä järjestyksessä FIFO-periaatteen mukaisesti.

Joustavuus : Jono-rajapinta on Collection-rajapinnan alatyyppi, mikä tarkoittaa, että sitä voidaan käyttää useiden erilaisten tietorakenteiden ja algoritmien kanssa sovelluksen vaatimuksista riippuen.

Lanka turvallisuutta : Jotkut Queue-käyttöliittymän toteutukset, kuten java.util.concurrent.ConcurrentLinkedQueue-luokka, ovat säikeen turvallisia, mikä tarkoittaa, että niitä voidaan käyttää useilla säikeillä samanaikaisesti aiheuttamatta ristiriitoja.

Esitys : Queue-käyttöliittymä tarjoaa tehokkaat toteutukset elementtien lisäämiseen, poistamiseen ja tarkastamiseen, joten se on hyödyllinen työkalu elementtikokoelmien hallintaan suorituskyvyn kannalta kriittisissä sovelluksissa.

Javan Queue-käyttöliittymän käytön haitat:

Rajoitettu toiminnallisuus: Queue-käyttöliittymä on suunniteltu erityisesti elementtikokoelmien hallintaan tietyssä järjestyksessä, mikä tarkoittaa, että se ei välttämättä sovellu monimutkaisemmille tietorakenteille tai algoritmeille.

Kokorajoitukset: Joillakin Queue-rajapinnan toteutuksilla, kuten ArrayDeque-luokalla, on kiinteä koko, mikä tarkoittaa, että ne eivät voi kasvaa tiettyä elementtimäärää pidemmälle.

Muistin käyttö: Toteutuksesta riippuen Queue-liitäntä saattaa vaatia enemmän muistia kuin muut tietorakenteet, varsinkin jos se tarvitsee lisätietoa elementtien järjestyksestä.

Monimutkaisuus : Queue-liittymää voi olla vaikea käyttää ja ymmärtää aloitteleville ohjelmoijille, varsinkin jos he eivät tunne tietorakenteiden ja algoritmien periaatteita.