java queue queue methods
V tomto výučbe sa dozvieme, čo je to fronta v jazyku Java, ako ju používať, príklad fronty Java, metódy fronty Java a implementácia rozhrania frontu:
Fronta je lineárna dátová štruktúra alebo kolekcia v Jave, ktorá ukladá prvky v poradí FIFO (prvý vstup, prvý výstup).
Zbierka frontov má dva konce, tj. Predný a zadný. Prvky sa pridávajú zozadu a odoberajú sa spredu.
=> Navštívte tu a pozrite si sériu školení Java pre všetkých.
Čo sa dozviete:
Čo je to fronta Java?
Štruktúra dát frontu je znázornená tak, ako je uvedené nižšie:
Ako je znázornené na vyššie uvedenom diagrame, front je štruktúra, ktorá má dva body, t. Prvky sa vložia do frontu na zadnom konci a odstránia sa z frontu vpredu.
V prostredí Java je Queue rozhranie, ktoré je súčasťou balíka java.util. Rozhranie frontu rozširuje rozhranie Java Collection.
Všeobecná definícia rozhrania frontu je:
public interface Queue extends Collection
Pretože front je rozhranie, nemožno ho vytvoriť inštanciou. Potrebujeme niekoľko konkrétnych tried na implementáciu funkčnosti rozhrania frontu. Rozhranie fronty implementujú dve triedy, tj. LinkedList a PriorityQueue.
Nasleduje niekoľko hlavných charakteristík dátovej štruktúry frontu:
- Poradie sa riadi poradím FIFO (prvý vstup, prvý výstup). To znamená, že prvok je vložený do poradia na konci a odstránený z poradia na začiatku.
- Rozhranie fronty Java poskytuje všetky metódy rozhrania Collection, ako je vkladanie, mazanie atď.
- LinkedList a PriorityQueue sú triedy, ktoré implementujú rozhranie frontu. ArrayBlockingQueue je ešte ďalšia trieda, ktorá implementuje rozhranie Queue.
- Fronty, ktoré sú súčasťou balíka java.util, je možné klasifikovať ako neobmedzené fronty, zatiaľ čo fronty, ktoré sa nachádzajú v súbore java.util.the súbežný balík, sú ohraničené fronty.
- Deque je rad, ktorý podporuje vkladanie a vypúšťanie z oboch koncov.
- Deque je bezpečný pre vlákna.
- BlockingQueues sú bezpečné z hľadiska vlákien a používajú sa na implementáciu problémov výrobcov a spotrebiteľov.
- BlockingQueues neumožňuje nulové prvky. Ak sa pokúsite o akúkoľvek operáciu súvisiacu s nulovými hodnotami, vyvolá sa NullPointerException.
Ako používať front v Jave?
Ak chcete použiť rad v prostredí Java, je potrebné najskôr importovať rozhranie frontu nasledovne:
import java.util.queue;
Alebo
import java.util.*;
Po importovaní môžeme vytvoriť poradie, ako je uvedené nižšie:
Queue str_queue = new LinkedList ();
Pretože Queue je rozhranie, na vytvorenie objektu fronty používame triedu LinkedList, ktorá implementuje rozhranie Queue.
Podobne môžeme vytvoriť rad s inými konkrétnymi triedami.
Queue str_pqueue = new PriorityQueue (); Queue int_queue = new ArrayDeque ();
Teraz, keď je objekt fronty vytvorený, môžeme objekt fronty inicializovať poskytnutím hodnôt prostredníctvom metódy pridania, ako je uvedené nižšie.
str_queue.add(“one”); str_queue.add(“two”); str_queue.add(“three”);
Príklad frontu Java
import java.util.*; public class Main { public static void main(String() args) { //declare a Queue Queue str_queue = new LinkedList(); //initialize the queue with values str_queue.add('one'); str_queue.add('two'); str_queue.add('three'); str_queue.add('four'); //print the Queue System.out.println('The Queue contents:' + str_queue); } }
Výkon:
Obsah frontu: (jedna, dva, tri, štyri)
Vyššie uvedený príklad ukazuje deklaráciu a inicializáciu objektu Queue. Potom už len vytlačíme obsah frontu.
Metódy radenia v Jave
V tejto časti si rozoberieme metódy API pre tento front. Rozhranie fronty podporuje rôzne operácie, ako je vkladanie, mazanie, nahliadnutie atď. Niektoré operácie vyvolajú výnimku, zatiaľ čo iné vrátia konkrétnu hodnotu, keď je metóda úspešná alebo zlyhá.
Upozorňujeme, že v kolekcii Queue v prostredí Java 8 neexistujú žiadne konkrétne zmeny. Nižšie uvedené spôsoby sú k dispozícii aj v novších verziách prostredia Java, ako je Java 9 atď.
V nasledujúcej tabuľke sú zhrnuté všetky tieto metódy.
Metóda | Metóda Prototyp | Popis |
---|---|---|
veľkosť | veľkosť int () | Vráti veľkosť alebo počet prvkov vo fronte. |
pridať | boolovský prírastok (E e) | Pridá prvok e do frontu na konci (na konci) frontu bez porušenia obmedzenia kapacity. Vráti hodnotu true, ak je úspech, alebo IllegalStateException, ak je kapacita vyčerpaná. |
nakuknúť | E nahliadnuť () | Vráti hlavu (prednú) frontu bez jej odstránenia. |
prvok | Prvok E () | Vykoná rovnakú operáciu ako metóda peek (). Ak je rad prázdny, hodí NoSuchElementException. |
odstrániť | E odstrániť () | Odstráni hlavu frontu a vráti ju. Ak je rad prázdny, hodí NoSuchElementException. |
anketa | E anketa () | Odstráni hlavu frontu a vráti ju. Ak je poradie prázdne, vráti sa null. |
Ponuka | boolovská ponuka (E e) | Vložte nový prvok e do poradia bez porušenia kapacitných obmedzení. |
Iterácia prvkov frontu
Prvkami frontu môžeme prechádzať buď pomocou slučky forEach, alebo pomocou iterátora. Program uvedený nižšie implementuje obidva prístupy k prechodu frontu.
import java.util.*; public class Main { public static void main(String() args) { //declare a Queue Queue LL_queue = new LinkedList(); //initialize the Queue LL_queue.add('Value-0'); LL_queue.add('Value-1'); LL_queue.add('Value-2'); LL_queue.add('Value-3'); //traverse the Queue using Iterator System.out.println('The Queue elements through iterator:'); Iterator iterator = LL_queue.iterator(); while(iterator.hasNext()){ String element = (String) iterator.next(); System.out.print(element + ' '); } System.out.println('
The Queue elements using for loop:'); //use new for loop to traverse the Queue for(Object object : LL_queue) { String element = (String) object; System.out.print(element + ' '); } } }
Výkon:
Prvky frontu prostredníctvom iterátora:
Hodnota-0 Hodnota-1 Hodnota-2 Hodnota-3
Prvky frontu využívajúce slučku for:
Hodnota-0 Hodnota-1 Hodnota-2 Hodnota-3
Implementácia frontu Java
Program nižšie demonštruje metódy, o ktorých sme hovorili vyššie.
ako otvoriť súbor .jar v systéme Windows 10
import java.util.*; public class Main { public static void main(String() args) { Queue q1 = new LinkedList(); //Add elements to the Queue q1.add(10); q1.add(20); q1.add(30); q1.add(40); q1.add(50); System.out.println('Elements in Queue:'+q1); //remove () method =>removes first element from the queue System.out.println('Element removed from the queue: '+q1.remove()); //element() => returns head of the queue System.out.println('Head of the queue: '+q1.element()); //poll () => removes and returns the head System.out.println('Poll():Returned Head of the queue: '+q1.poll()); //returns head of the queue System.out.println('peek():Head of the queue: '+q1.peek()); //print the contents of the Queue System.out.println('Final Queue:'+q1); } }
Výkon:
Prvky v poradí: (10, 20, 30, 40, 50)
Prvok odstránený z poradia: 10
Vedúci poradia: 20
Anketa (): Vrátená Vedúci frontu: 20
peek (): Vedúci frontu: 30
Finálny rad: (30, 40, 50)
Implementácia poľa frontu Java
Implementácia frontu nie je taká jednoduchá ako implementácia zásobníka. Poradie obsahuje predovšetkým dva ukazovatele, zadný a predný. Rôzne operácie sa tiež vykonávajú na dvoch rôznych koncoch.
Na implementáciu frontu pomocou polí najskôr deklarujeme pole, ktoré bude obsahovať n počet prvkov frontu.
Potom definujeme nasledujúce operácie, ktoré sa majú vykonať v tomto fronte.
# 1) Poradie: Operácia na vloženie prvku do frontu je Enqueue (funkcia queueEnqueue v programe). Pri vkladaní prvku na zadný koniec musíme najskôr skontrolovať, či je rad plný. Ak je plný, nemôžeme vložiť prvok. Ak zadné # 2) Poradie: Operácia na odstránenie prvku z frontu je Dequeue (funkcia queueDequeue v programe). Najskôr skontrolujeme, či je rad prázdny. Aby fungovanie operácie zaradenia do fronty fungovalo, musí byť vo fronte aspoň jeden prvok. # 3) Predné: Táto metóda vráti prednú časť frontu. # 4) Displej: Táto metóda prejde radom a zobrazí prvky frontu. Nasledujúci program Java demonštruje implementáciu frontu do poľa. Výkon: Počiatočná fronta: Pretože sme vo vyššie uvedenom programe implementovali dátovú štruktúru frontu pomocou polí, môžeme frontu implementovať aj pomocou prepojeného zoznamu. V tomto programe implementujeme rovnaké metódy zaradenia, zaradenia, frontu a zobrazenia. Rozdiel je v tom, že namiesto poľa budeme používať dátovú štruktúru Prepojený zoznam. Nasledujúci program demonštruje implementáciu Zoznamu prepojených zoznamov v Jave. Výkon: Prvok 6 bol pridaný do poradia BlockingQueue je rozhranie pridané do Java 1.5 a je súčasťou java.util.concurrent balíček. Toto rozhranie zavádza blokovanie v prípade, že je blokujúca fronta plná alebo prázdna. Teda keď vlákno vstúpi do frontu a pokúsi sa vložiť (zaradiť do frontu) prvky do frontu, ktorý je už plný, je blokované, kým iné vlákno nevytvorí priestor vo fronte (možno operáciou zaradenia do frontu alebo vyčistením frontu). Podobne v prípade dequeuingu je operácia blokovaná, ak je fronta prázdna, kým nebude prvok k dispozícii pre operáciu dequeue. Metódy BlockingQueue používajú určitú formu riadenia súbežnosti, ako sú vnútorné zámky, a sú atómové. BlockingQueue je súbežný front, ktorý súčasne riadi operácie frontu. Blokovacia fronta je uvedená nižšie: Upozorňujeme, že BlockingQueue neprijíma nulové hodnoty. Výsledkom pokusu o vloženie nulovej hodnoty do frontu je NullPointerException. Niektoré z implementácií BlockingQueue poskytovaných v Jave sú LinkedBlockingQueue, PriorityBlockingQueue, ArrayBlockingQueue a SynchonousQueue. Všetky tieto implementácie sú bezpečné pre vlákna. BlockingQueues sú dva typy: V ohraničenom fronte sa kapacita frontu odovzdá konštruktoru frontu. Vyhlásenie o poradí je takéto: BlockingQueue blockingQueue = nový LinkedBlockingDeque (5); V neobmedzenom fronte explicitne nenastavujeme kapacitu frontu a môže narastať. Kapacita je nastavená na Integer.MAX_VALUE. Deklarácia nespútaného frontu je nasledovná: BlockingQueue blockingQueue = new LinkedBlockingDeque (); Rozhranie BlockingQueue sa primárne používa na typy problémov producent-spotrebiteľ, kde producent produkuje zdroje a spotrebiteľ ich spotrebúva. Otázka 1) Čo je to front v Jave? Odpoveď: Fronta v Jave je lineárne usporiadaná dátová štruktúra, ktorá sleduje FIFO (First In, First Out) usporiadanie prvkov. To znamená, že prvok vložený ako prvý do fronty bude prvým prvkom, ktorý bude odstránený. V prostredí Java je front implementovaný ako rozhranie, ktoré dedí rozhranie Collection. Otázka č. 2) Je fronta bezpečná pre Java? Odpoveď: Nie všetky fronty sú bezpečné voči vláknam, ale BlockingQueues v Jave sú bezpečné voči vláknam. Otázka č. 3) Čo je rýchlejšie - Stack alebo Queue? Odpoveď: Zásobník je rýchlejší. V zásobníku sa prvky spracúvajú iba z jedného konca, a preto nie je potrebné ich posúvanie. Ale vo fronte je potrebné prvky posunúť a upraviť, pretože na vkladanie a mazanie prvkov existujú dva rôzne ukazovatele. Otázka č. 4) Aké sú typy frontu? Odpoveď: Fronty sú nasledujúceho typu: Otázka č. 5) Prečo sa front používa? Odpoveď: Štruktúra údajov frontu sa používa na účely synchronizácie. Fronta sa používa aj na plánovanie disku a CPU. V tomto tutoriáli sme diskutovali o jednoduchých frontoch spolu s ich podrobnosťami, ako sú deklarácie, implementácia inicializácie a metódy. Dozvedeli sme sa tiež o implementácii Queue v Array a LinkedList v Jave. V našich pripravovaných tutoriáloch si podrobne rozoberieme viac typov front. => Skontrolujte VŠETKY návody Java tu. class Queue { private static int front, rear, capacity; private static int queue(); Queue(int size) { front = rear = 0; capacity = size; queue = new int(capacity); } // insert an element into the queue static void queueEnqueue(int item) { // check if the queue is full if (capacity == rear) { System.out.printf('
Queue is full
'); return; } // insert element at the rear else { queue(rear) = item; rear++; } return; } //remove an element from the queue static void queueDequeue() { // check if queue is empty if (front == rear) { System.out.printf('
Queue is empty
'); return; } // shift elements to the right by one place uptil rear else { for (int i = 0; i
Fronta je prázdna
Poradie po operácii zaradenia do frontu:
10 = 30 = 50 = 70 =
Predný prvok fronty: 10
Fronta je plná
10 = 30 = 50 = 70 =
Poradie po dvoch operáciách zaradenia: 50 = 70 =
Predný prvok fronty: 50Implementácia prepojeného zoznamu Java Queue
class LinkedListQueue { private Node front, rear; private int queueSize; // queue size //linked list node private class Node { int data; Node next; } //default constructor - initially front & rear are null; size=0; queue is empty public LinkedListQueue() { front = null; rear = null; queueSize = 0; } //check if the queue is empty public boolean isEmpty() { return (queueSize == 0); } //Remove item from the front of the queue. public int dequeue() { int data = front.data; front = front.next; if (isEmpty()) { rear = null; } queueSize--; System.out.println('Element ' + data+ ' removed from the queue'); return data; } //Add data at the rear of the queue. public void enqueue(int data) { Node oldRear = rear; rear = new Node(); rear.data = data; rear.next = null; if (isEmpty()) { front = rear; } else { oldRear.next = rear; } queueSize++; System.out.println('Element ' + data+ ' added to the queue'); } //print front and rear of the queue public void print_frontRear() { System.out.println('Front of the queue:' + front.data + ' Rear of the queue:' + rear.data); } } class Main{ public static void main(String a()){ LinkedListQueue queue = new LinkedListQueue(); queue.enqueue(6); queue.enqueue(3); queue.print_frontRear(); queue.enqueue(12); queue.enqueue(24); queue.dequeue(); queue.dequeue(); queue.enqueue(9); queue.print_frontRear(); } }
Prvok 3 bol pridaný do poradia
Predná strana frontu: 6 Zadná strana frontu: 3
Element 12 bol pridaný do poradia
Element 24 bol pridaný do poradia
Prvok 6 bol odstránený z poradia
Prvok 3 bol odstránený z poradia
Prvok 9 bol pridaný do poradia
Predná strana frontu: 12 Zadná strana frontu: 9BlockingQueue v Jave
World of Warcraft vanilkové súkromné servery
Typy blokovania fronty
Ohraničený front
Bez obmedzenia
často kladené otázky
Záver
Odporúčané čítanie