logo

Rindas interfeiss Java

Rindas interfeiss ir pieejams java.util iepakojumu un pagarina Kolekcijas saskarne tiek izmantots, lai turētu apstrādājamos elementus FIFO (First In First Out) secībā. Tas ir sakārtots objektu saraksts, kura izmantošana aprobežojas ar elementu ievietošanu saraksta beigās un elementu dzēšanu no saraksta sākuma (t.i.), tas seko FIFO vai princips pirmais iekšā-pirmais-ārā.

Queue-Deque-PriorityQueue-In-Java

Tā kā rindai ir saskarne, deklarācijai ir nepieciešama konkrēta klase, un visizplatītākās klases ir PriorityQueue un LinkedList Java valodā. Ņemiet vērā, ka neviena no šīm ieviešanām nav droša pavedienam. PriorityBlockingQueue ir viena alternatīva ieviešana, ja ir nepieciešama pavedienu droša ieviešana.



Deklarācija: Rindas interfeiss tiek deklarēts kā:

public interface Queue extends Collection>

Rindas objektu izveide: Kopš Rinda ir saskarne , objektus nevar izveidot no tipa rindas. Mums vienmēr ir nepieciešama klase, kas paplašina šo sarakstu, lai izveidotu objektu. Un arī pēc ieviešanas Generics Java 1.5 versijā ir iespējams ierobežot rindā glabājamo objektu tipu. Šo tipa drošo rindu var definēt kā:

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

Java programmā rindas interfeiss ir kolekcijas interfeisa apakštips un attēlo elementu kolekciju noteiktā secībā. Tas atbilst FIFO (pirmais iekšā, pirmais ārā) principam, kas nozīmē, ka elementi tiek izgūti tādā secībā, kādā tie tika pievienoti rindai.

Rindas saskarne nodrošina vairākas metodes rindas elementu pievienošanai, noņemšanai un pārbaudei. Šeit ir dažas no visbiežāk izmantotajām metodēm:

add(element): pievieno elementu rindas aizmugurē. Ja rinda ir pilna, tas rada izņēmumu.

piedāvājums(elements): pievieno elementu rindas aizmugurē. Ja rinda ir pilna, tā atgriež false.

Remove(): Noņem un atgriež elementu rindas sākumā. Ja rinda ir tukša, tas rada izņēmumu.

poll(): noņem un atgriež elementu rindas sākumā. Ja rinda ir tukša, tā atgriež nulli.

elements(): atgriež elementu rindas sākumā, to nenoņemot. Ja rinda ir tukša, tas rada izņēmumu.

peek(): atgriež rindas sākumā esošo elementu, to nenoņemot. Ja rinda ir tukša, tā atgriež nulli.

Queue saskarni ir ieviesušas vairākas Java klases, tostarp LinkedList, ArrayDeque un PriorityQueue. Katra no šīm klasēm nodrošina dažādas rindas saskarnes implementācijas ar atšķirīgām veiktspējas īpašībām un funkcijām.

Kopumā rindas saskarne ir noderīgs rīks, lai pārvaldītu elementu kolekcijas noteiktā secībā, un to plaši izmanto daudzās dažādās lietojumprogrammās un nozarēs.

Piemērs:

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

>

>

Izvade

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

Piemērs: Rinda

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

>

>

Izvade

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

Darbības rindas interfeisā

Apskatīsim, kā rindā veikt dažas bieži lietotas darbības, izmantojot Prioritātes rindas klase .

1. Elementu pievienošana: Lai rindā pievienotu elementu, mēs varam izmantot add() metode . Ievietošanas secība netiek saglabāta PriorityQueue. Elementi tiek saglabāti, pamatojoties uz prioritātes secību, kas pēc noklusējuma ir augoša.

Piemērs

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

>

kļūda: nevarēja atrast vai ielādēt galveno klasi

>

Izvade

[For, Geeks, Geeks]>

2. Elementu noņemšana: Lai noņemtu elementu no rindas, mēs varam izmantot Remove() metode. Ja ir vairāki šādi objekti, tiek noņemta pirmā objekta parādīšanās. Bez tam, lai noņemtu galvu un atgrieztu to, tiek izmantota arī poll() metode.

Piemērs

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

>

>

Izvade

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

3. Rindas atkārtošana: Ir vairāki veidi, kā atkārtot rindā. Slavenākais veids ir pārveidot rindu par masīvu un šķērsot, izmantojot for cilpu. Tomēr rindai ir arī iebūvēts iterators, ko var izmantot rindas atkārtošanai.

Piemērs

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

>

>

Izvade

For Geeks Geeks>

Rindas raksturojums: Tālāk ir norādītas rindas īpašības.

  • Rinda tiek izmantota, lai ievietotu elementus rindas beigās un noņemtu no rindas sākuma. Tas seko FIFO koncepcijai.
  • Java rinda atbalsta visas kolekcijas saskarnes metodes, ieskaitot ievietošanu, dzēšanu utt.
  • LinkedList , ArrayBlockingQueue un PriorityQueue ir visbiežāk izmantotās implementācijas.
  • Ja blokā BlockingQueues tiek veikta nulles darbība, tiek izmests NullPointerException.
  • Rindas, kas ir pieejamas pakotnē java.util, ir neierobežotas rindas.
  • Rindas, kas ir pieejamas pakotnē java.util.concurrent, ir ierobežotās rindas.
  • Visas rindas, izņemot deques, atbalsta ievietošanu un noņemšanu attiecīgi rindas beigās un sākumā. Deques atbalsta elementa ievietošana un noņemšana abos galos.

Klases, kas ievieš rindas interfeisu:

1. PriorityQueue: PriorityQueue klase, kas ir ieviesta kolekcijas sistēmā, nodrošina veidu, kā apstrādāt objektus, pamatojoties uz prioritāti. Ir zināms, ka rinda darbojas pēc algoritma First-In-First-Out, bet dažreiz rindas elementi ir jāapstrādā atbilstoši prioritātei, tad tiek aktivizēta PriorityQueue. Apskatīsim, kā izveidot rindas objektu, izmantojot šo klasi.

Piemērs

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

>

>

Izvade

10 10 15>

2. Saistītais saraksts: LinkedList ir klase, kas ir ieviesta savākšanas sistēmā, kas pēc būtības ievieš Piemērs

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

>

>

Izvade

10 10 20>

3. PriorityBlockingQueue: Jāatzīmē, ka abas implementācijas, PriorityQueue un LinkedList nav drošas pavedieniem. PriorityBlockingQueue ir viena alternatīva ieviešana, ja ir nepieciešama pavedienu droša ieviešana. PriorityBlockingQueue ir neierobežota bloķēšanas rinda, kas izmanto tos pašus secības noteikumus kā klase PriorityQueue un piegādes, kas bloķē izguves darbības.
Tā kā tas ir neierobežots, elementu pievienošana dažkārt var neizdoties, jo resursi tiek izsmelti OutOfMemory Error . Apskatīsim, kā izveidot rindas objektu, izmantojot šo klasi.

Piemērs

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

>

>

Izvade

10 10 15>

Rindas saskarnes metodes

Rindas interfeiss manto visas metodes, kas atrodas kolekciju saskarne vienlaikus ieviešot šādas metodes:

Metode

Apraksts

pievienot(indekss, elements) Šo metodi izmanto, lai rindā pievienotu elementu noteiktā indeksā. Kad tiek nodots viens parametrs, tas vienkārši pievieno elementu rindas beigās.
pievienot visu (indekss, kolekcijas kolekcija) Šo metodi izmanto, lai rindai pievienotu visus noteiktās kolekcijas elementus. Kad tiek nodots viens parametrs, tas rindas beigās pievieno visus dotās kolekcijas elementus.
Izmērs() Šo metodi izmanto, lai atgrieztu rindas lielumu.
skaidrs () Šo metodi izmanto, lai noņemtu visus rindā esošos elementus. Tomēr izveidotās rindas atsauce joprojām tiek saglabāta.
noņemt () Šo metodi izmanto, lai noņemtu elementu no rindas priekšpuses.
noņemt(int indekss) Šī metode noņem elementu no norādītā indeksa. Tas pārvieto nākamos elementus (ja tādi ir) pa kreisi un samazina to indeksus par 1.
noņemt (elements) Šo metodi izmanto, lai noņemtu un atgrieztu pirmo norādītā elementa gadījumu rindā.
iegūt (indekss) Šī metode atgriež elementus norādītajā indeksā.
kopa (indekss, elements) Šī metode aizvieto elementus noteiktā indeksā ar jauno elementu. Šī funkcija atgriež elementu, kas tikko tika aizstāts ar jaunu elementu.
indexOf(elements) Šī metode atgriež pirmo dotā elementa vai -1 ja elements rindā nav.
pēdējaisIndekss(elements) Šī metode atgriež pēdējo dotā elementa vai -1 ja elements rindā nav.
vienāds(elements) Šo metodi izmanto, lai salīdzinātu dotā elementa vienlīdzību ar rindas elementiem.
hashCode() Šo metodi izmanto, lai atgrieztu dotās rindas hashcode vērtību.
ir tukšs() Šo metodi izmanto, lai pārbaudītu, vai rinda ir tukša. Tas atgriež patiesu, ja rinda ir tukša, pretējā gadījumā atgriež vērtību false.
satur (elementu) Šo metodi izmanto, lai pārbaudītu, vai rindā ir dotais elements vai nav. Tas atgriež patieso vērtību, ja rindā ir ietverts elements.
satur visu (kolekciju kolekcija) Šo metodi izmanto, lai pārbaudītu, vai rindā ir visa elementu kolekcija.
kārtot (salīdzinājuma salīdzināšana) Šo metodi izmanto, lai sakārtotu rindas elementus, pamatojoties uz doto salīdzinātājs .
Būla pievienošana(objekts) Šī metode tiek izmantota, lai ievietotu norādīto elementu rindā un sekmīgi atgrieztu patieso vērtību.
Būla piedāvājums (objekts) Šo metodi izmanto, lai rindā ievietotu norādīto elementu.
Objekta aptauja() Šo metodi izmanto, lai izgūtu un noņemtu rindas galveni, vai atgriež nulli, ja rinda ir tukša.
Objekta elements() Šo metodi izmanto, lai izgūtu, bet nenoņemtu rindas galvu.
Objekta apskate () Šī metode tiek izmantota, lai izgūtu, bet nenoņemtu šīs rindas galveni, vai atgriež nulli, ja šī rinda ir tukša.

Rindas saskarnes izmantošanas priekšrocības Java:

Pasūtījumu saglabāšana : rindas interfeiss nodrošina veidu, kā saglabāt un izgūt elementus noteiktā secībā, ievērojot FIFO (pirmais iekšā, pirmais ārā) principu.

Elastīgums : rindas interfeiss ir kolekcijas interfeisa apakštips, kas nozīmē, ka to var izmantot ar daudzām dažādām datu struktūrām un algoritmiem atkarībā no lietojumprogrammas prasībām.

Pavediens drošību : Dažas rindas saskarnes implementācijas, piemēram, java.util.concurrent.ConcurrentLinkedQueue klase, ir drošas pavedieniem, kas nozīmē, ka tām var piekļūt vairāki pavedieni vienlaikus, neizraisot konfliktus.

Performance : rindas interfeiss nodrošina efektīvu ieviešanu elementu pievienošanai, noņemšanai un pārbaudei, padarot to par noderīgu rīku elementu kolekciju pārvaldībai veiktspējai kritiskās lietojumprogrammās.

Rindas saskarnes izmantošanas trūkumi Java:

Ierobežota funkcionalitāte: Rindas interfeiss ir īpaši izstrādāts, lai pārvaldītu elementu kolekcijas noteiktā secībā, kas nozīmē, ka tas var nebūt piemērots sarežģītākām datu struktūrām vai algoritmiem.

Izmēru ierobežojumi: Dažām Queue interfeisa implementācijām, piemēram, ArrayDeque klasei, ir noteikts izmērs, kas nozīmē, ka tās nevar pārsniegt noteiktu elementu skaitu.

Atmiņas lietojums: Atkarībā no ieviešanas rindas saskarnei var būt nepieciešams vairāk atmiņas nekā citām datu struktūrām, īpaši, ja tai ir jāsaglabā papildu informācija par elementu secību.

Sarežģītība : Queue interfeiss var būt grūti lietojams un saprotams iesācējiem programmētājiem, īpaši, ja viņi nav pazīstami ar datu struktūru un algoritmu principiem.