java queue queue methods
U ovom vodiču razgovarat ćemo o tome što je red u Javi, kako ga koristiti, primjer Java Queue, metode Java Queue i implementacija sučelja u redu:
Red čekanja je linearna struktura podataka ili zbirka na Javi koja pohranjuje elemente u redoslijedu FIFO (First In, First Out).
Zbirka redova ima dva kraja, tj. Sprijeda i straga. Elementi su dodani straga i uklonjeni sprijeda.
=> Posjetite ovdje da biste vidjeli seriju Java treninga za sve.
Što ćete naučiti:
Što je Java red?
Struktura podataka o redu čekanja predstavljena je kako je prikazano u nastavku:
Kao što je prikazano na gornjem dijagramu, red je struktura koja ima dvije točke, tj. Početak (sprijeda) i kraj (straga). Elementi se ubacuju u red na stražnjem kraju i uklanjaju iz reda na prednjoj strani.
U Javi je Queue sučelje koje je dio paketa java.util. Sučelje reda proširuje sučelje Java Collection.
Opća definicija sučelja reda čekanja je:
public interface Queue extends Collection
Kako je Red čekanja sučelje, ne može se instancirati. Potrebne su nam neke konkretne klase da bismo implementirali funkcionalnost sučelja reda. Dvije klase implementiraju sučelje reda čekanja, tj. LinkedList i PriorityQueue.
Slijede neke od glavnih karakteristika strukture podataka reda čekanja:
- Red čekanja slijedi FIFO (First In, First Out) redoslijed. To znači da je element umetnut u red na kraju i uklonjen iz reda na početku.
- Sučelje Java reda čeka pruža sve metode sučelja za prikupljanje, poput umetanja, brisanja itd.
- LinkedList i PriorityQueue su klase koje implementiraju sučelje reda. ArrayBlockingQueue je još jedna klasa koja implementira sučelje reda.
- Redovi koji su dio paketa java.util mogu se klasificirati kao neograničeni redovi, dok su oni koji su prisutni u java.util. istodobnom paketu ograničeni redovi.
- Deque je red koji podržava umetanje i brisanje s oba kraja.
- Deque je siguran u niti.
- BlockingQueues su zaštićeni nitima i koriste se za provođenje problema proizvođača i potrošača.
- BlockingQueues ne dopuštaju null elemente. NullPointerException se baca ako se pokuša bilo koja operacija vezana uz null vrijednosti.
Kako koristiti red u Javi?
Da bismo koristili red u Javi, prvo moramo uvesti sučelje reda kako slijedi:
import java.util.queue;
Ili
import java.util.*;
Nakon što se ovo uveze, možemo stvoriti red kao što je prikazano u nastavku:
Queue str_queue = new LinkedList ();
Kako je Queue sučelje, koristimo klasu LinkedList koja implementira sučelje Queue za stvaranje objekta reda.
Slično tome, možemo stvoriti red s drugim konkretnim klasama.
Queue str_pqueue = new PriorityQueue (); Queue int_queue = new ArrayDeque ();
Sada kada je stvoren objekt u redu, objekt u redu možemo inicijalizirati pružajući mu vrijednosti metodom dodavanja kao što je prikazano u nastavku.
str_queue.add(“one”); str_queue.add(“two”); str_queue.add(“three”);
Primjer Java Queue
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); } }
Izlaz:
Sadržaj reda: (jedan, dva, tri, četiri)
Gornji primjer prikazuje deklaraciju i inicijalizaciju objekta Queue. Zatim samo ispisujemo sadržaj reda.
Metode reda u Javi
U ovom ćemo odjeljku razgovarati o metodama API-ja za red. Sučelje u redu čekanja podržava razne operacije poput umetanja, brisanja, zavirivanja itd. Neke operacije donose iznimku, dok neke vraćaju određenu vrijednost kada metoda uspije ili ne uspije.
Imajte na umu da nema posebnih promjena u kolekciji Queue u Javi 8. Metode u nastavku dostupne su i u kasnijim verzijama Jave kao što je Java 9 itd.
Tablica u nastavku sažima sve ove metode.
Metoda | Prototip metode | Opis |
---|---|---|
veličina | veličina int () | Vraća veličinu ili broj elemenata u redu čekanja. |
dodati | boolean add (E e) | Dodaje element e u red na kraju (rep) reda bez kršenja ograničenja kapaciteta. Vraća true ako je uspjeh ili IllegalStateException ako je kapacitet iscrpljen. |
zaviriti | E zaviriti () | Vraća glavu (ispred) reda bez uklanjanja. |
element | E element () | Izvodi istu operaciju kao i metoda peek (). Baca NoSuchElementException kad je red prazan. |
ukloniti | E ukloni () | Uklanja glavu reda i vraća je. Baca NoSuchElementException ako je red prazan. |
anketa | E anketa () | Uklanja glavu reda i vraća je. Ako je red prazan, vraća nulu. |
Ponuda | logička ponuda (E e) | Umetnite novi element e u red bez kršenja ograničenja kapaciteta. |
Ponavljanje elemenata reda
Elemente reda možemo prelaziti bilo pomoću forEach petlje ili pomoću iteratora. Program naveden u nastavku provodi oba pristupa za prelazak preko reda čekanja.
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 + ' '); } } }
Izlaz:
Elementi reda čekanja kroz iterator:
Vrijednost-0 Vrijednost-1 Vrijednost-2 Vrijednost-3
Elementi reda koji koriste for petlju:
Vrijednost-0 Vrijednost-1 Vrijednost-2 Vrijednost-3
Implementacija Java reda čekanja
Program u nastavku prikazuje metode o kojima smo gore raspravljali.
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); } }
Izlaz:
Elementi u redu čekanja: (10, 20, 30, 40, 50)
Element uklonjen iz reda čekanja: 10
Šef reda: 20
Anketa (): Vraćeni šef reda: 20
zaviriti (): Šef reda: 30
Završni red: (30, 40, 50)
Implementacija niza Java Queue
Implementacija reda nije tako izravna kao implementacija stoga. Prije svega, red sadrži dva pokazivača, stražnji i prednji. Također se rade različite operacije na dva različita kraja.
Da bismo implementirali red pomoću nizova, prvo deklariramo niz koji će sadržavati n broj elemenata reda.
Zatim definiramo sljedeće operacije koje će se izvesti u ovom redu.
# 1) Stavite u red: Operacija za umetanje elementa u red je Enqueue (funkcija queueEnqueue u programu). Za umetanje elementa na stražnjem kraju prvo moramo provjeriti je li red pun. Ako je pun, tada ne možemo umetnuti element. Ako straga # 2) Dequeue: Operacija brisanja elementa iz reda je Dequeue (funkcija queueDequeue u programu). Prvo provjeravamo je li red prazan. Da bi operacija dequeue funkcionirala, mora postojati barem jedan element u redu čekanja. # 3) Prednja strana: Ova metoda vraća prednji dio reda. # 4) Zaslon: Ova metoda prelazi red i prikazuje elemente reda. Sljedeći Java program prikazuje implementaciju niza Red čekanja. Izlaz: Početni red: Kako smo u gore navedenom programu implementirali strukturu podataka reda čekanja pomoću nizova, također možemo implementirati red čekanja pomoću povezanog popisa. U ovom ćemo programu primijeniti iste metode enqueue, dequeue, front i display. Razlika je u tome što ćemo umjesto Array koristiti strukturu podataka Linked List. Program u nastavku prikazuje implementaciju reda povezanog popisa u Javi. Izlaz: Element 6 dodan u red čekanja BlockingQueue je sučelje dodano u Javi 1.5 i dio je java.util.concurrent paket. Ovo sučelje uvodi blokiranje u slučaju da je BlockingQueue pun ili prazan. Stoga, kada nit pristupa redu i pokušava umetnuti (enqueue) elemente u red koji je već popunjen, blokira se dok druga nit ne stvori prostor u redu (možda operacijom dequeue ili čišćenjem reda). Slično tome, u slučaju dequeuque, operacija je blokirana ako je red prazan dok element ne postane dostupan za operaciju dequeue. Metode BlockingQueue koriste neki oblik kontrole istodobnosti poput unutarnjih brava i atomske su. BlockingQueue je istodobni red koji istovremeno upravlja operacijama reda. Red za blokiranje prikazan je u nastavku: Imajte na umu da BlockingQueue ne prihvaća null vrijednosti. Pokušaj umetanja null vrijednosti u red dovodi do NullPointerException. Neke od implementacija BlockingQueue osiguranih u Javi su LinkedBlockingQueue, PriorityBlockingQueue, ArrayBlockingQueue i SynchonousQueue. Sve ove implementacije su zaštićene nitima. BlockingQueues su dvije vrste: U ograničenom redu, kapacitet reda prosljeđuje se konstruktoru reda. Izjava o redu čekanja je sljedeća: BlockingQueue blockingQueue = novi LinkedBlockingDeque (5); U neograničenom redu ne postavljamo eksplicitno kapacitet reda i on može rasti u veličini. Kapacitet je postavljen na Integer.MAX_VALUE. Izjava o neograničenom redu je sljedeća: BlockingQueue blockingQueue = novo LinkedBlockingDeque (); Sučelje BlockingQueue prvenstveno se koristi za probleme proizvođača-potrošača u kojima proizvođač proizvodi resurse, a potrošač troši resurse. P # 1) Što je red u Javi? Odgovor: Red čekanja u Javi linearna je uređena struktura podataka koja slijedi FIFO (First In, First Out) redoslijed elemenata. To znači da će element koji je prvi umetnut u red biti prvi element koji će se ukloniti. U Javi je red implementiran kao sučelje koje nasljeđuje sučelje Collection. P # 2) Je li Java zaštićena nitima u redu čekanja? Odgovor: Nisu svi redovi sigurni u niti, ali BlockingQueues u Javi su sigurni u niti. 3. pitanje) Što je brže - Stack ili Red? Odgovor: Stog je brži. U hrpi se elementi obrađuju samo s jednog kraja, stoga nije potrebno pomicanje. Ali u redu, elementi se trebaju pomaknuti i prilagoditi jer postoje dva različita pokazivača za umetanje i brisanje elemenata. P # 4) Koje su vrste reda? Odgovor: Redovi su sljedećih vrsta: 5. pitanje) Zašto se koristi Red čekanja? Odgovor: Struktura podataka o redu čekanja koristi se u svrhe sinkronizacije. Red se također koristi za planiranje diska i CPU-a. U ovom uputstvu raspravljali smo o jednostavnim redovima, zajedno s njihovim pojedinostima, poput deklaracija, implementacije inicijalizacije i metoda. Također smo saznali o implementaciji Array i LinkedList Queue u Javi. U našim predstojećim vodičima detaljno ćemo razgovarati o više vrsta redova. => Ovdje provjerite SVE Java tutorijale. 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
Red čekanja je prazan
Red čekanja nakon operacije čekanja:
10 = 30 = 50 = 70 =
Prednji element reda: 10
Red je pun
10 = 30 = 50 = 70 =
Red čekanja nakon dvije operacije uklanjanja iz reda: 50 = 70 =
Prednji element reda: 50Implementacija povezanog popisa 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(); } }
Element 3 dodan u red čekanja
Prednji dio: 6 Stražnji dio: 3
Element 12 dodan u red čekanja
U red čekanja dodan je element 24
Element 6 uklonjen iz reda
Element 3 uklonjen iz reda
Element 9 dodan u red čekanja
Prednji dio: 12 Stražnji dio: 9BlockingQueue u Javi
Tipovi reda blokiranja
Ograničeni red čekanja
izmjenjivač glasa koji radi s neskladom
Neograničeni red čekanja
Često postavljana pitanja
Zaključak
Preporučena literatura