java queue queue methods
У овом упутству ћемо разговарати о томе шта је ред у Јави, како га користити, пример Јава реда, Јава методе реда и примена интерфејса реда:
Ред је линеарна структура података или колекција на Јави која елементе чува у ФИФО (Фирст Ин, Фирст Оут) редоследу.
Колекција редова има два краја, тј. Предњи и задњи. Елементи су додати позади и уклоњени са предње стране.
како сортирати низ у јави
=> Посетите овде да бисте видели серију Јава обуке за све.
Шта ћете научити:
Шта је Јава ред?
Структура података о реду је представљена како је приказано у наставку:
Као што је приказано на горњем дијаграму, ред је структура која има две тачке, тј. Почетак (предњи) и крајњи (задњи). Елементи се убацују у ред на задњем крају и уклањају из реда на предњој страни.
У Јави је Куеуе интерфејс који је део пакета јава.утил. Интерфејс реда проширује интерфејс Јава Цоллецтион.
Општа дефиниција интерфејса реда је:
public interface Queue extends Collection
Како је Ред чекања интерфејс, не може се инстанцирати. Потребне су нам неке конкретне класе да бисмо применили функционалност интерфејса реда. Две класе имплементирају интерфејс реда, тј. ЛинкедЛист и ПриоритиКуеуе.
Следе неке од главних карактеристика структуре података о реду:
- Ред чекања следи редослед ФИФО (Фирст Ин, Фирст Оут). То значи да је елемент уметнут у ред на крају и уклоњен из реда на почетку.
- Интерфејс Јава реда обезбеђује све методе интерфејса Цоллецтион, попут уметања, брисања итд.
- ЛинкедЛист и ПриоритиКуеуе су класе које имплементирају интерфејс реда. АрраиБлоцкингКуеуе је још једна класа која имплементира интерфејс Куеуе.
- Редови који су део пакета јава.утил могу се класификовати као неограничени редови, док су они који су присутни у јава.утил. истовременом пакету ограничени редови.
- Декуе је ред који подржава уметање и брисање са оба краја.
- Декуе је заштићен од нити.
- БлоцкингКуеуес су заштићени од нити и користе се за решавање проблема произвођача и потрошача.
- БлоцкингКуеуес не дозвољавају нулл елементе. НуллПоинтерЕкцептион се баца ако се покуша било која операција везана за нулл вредности.
Како се користи ред у Јави?
Да бисмо користили ред у Јави, прво морамо да увеземо интерфејс реда како следи:
import java.util.queue;
Или
import java.util.*;
Када се ово увезе, можемо створити ред као што је приказано доле:
Queue str_queue = new LinkedList ();
Како је Куеуе интерфејс, користимо класу ЛинкедЛист која имплементира интерфејс Куеуе за креирање објекта реда.
Слично томе, можемо створити ред са другим конкретним класама.
Queue str_pqueue = new PriorityQueue (); Queue int_queue = new ArrayDeque ();
Сада када је објекат реда креиран, можемо да иницијализујемо објекат реда пружајући му вредности методом додавања као што је приказано доле.
str_queue.add(“one”); str_queue.add(“two”); str_queue.add(“three”);
Пример Јава Куеуе
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); } }
Излаз:
Садржај реда: (један, два, три, четири)
Горњи пример приказује декларацију и иницијализацију објекта Куеуе. Затим само исписујемо садржај реда.
Методе редова у Јави
У овом одељку ћемо размотрити методе АПИ-ја за ред. Интерфејс реда чекања подржава разне операције попут уметања, брисања, завиривања итд. Неке операције доносе изузетак, док неке враћају одређену вредност када метода успе или не успе.
Имајте на уму да у Јава 8. нема посебних промена у колекцији Куеуе. Методе у наставку су такође доступне у каснијим верзијама Јава попут Јава 9 итд.
Табела у наставку резимира све ове методе.
Метод | Прототип методе | Опис |
---|---|---|
величина | инт величина () | Враћа величину или број елемената у реду. |
додати | логички додатак (Е е) | Додаје елемент е у ред на крају (реп) реда без кршења ограничења капацитета. Враћа тачно ако је успех или ИллегалСтатеЕкцептион ако је капацитет исцрпљен. |
завирити | Е пеек () | Враћа главу (предњу страну) реда без уклањања. |
елемент | Е елемент () | Изводи исту операцију као и метода пеек (). Баца НоСуцхЕлементЕкцептион када је ред празан. |
уклонити | Е уклони () | Уклања главу реда и враћа је. Баца НоСуцхЕлементЕкцептион ако је ред празан. |
анкета | Е анкета () | Уклања главу реда и враћа је. Ако је ред празан, враћа нулу. |
Понуда | логичка понуда (Е е) | Уметните нови елемент е у ред без кршења ограничења капацитета. |
Понављање елемената реда
Елементе реда можемо прелазити било помоћу форЕацх петље или помоћу итератора. Програм дат у наставку примењује оба приступа за прелазак преко реда.
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 + ' '); } } }
Излаз:
Елементи реда преко итератора:
Вредност-0 Вредност-1 Вредност-2 Вредност-3
Елементи реда који користе фор петљу:
Вредност-0 Вредност-1 Вредност-2 Вредност-3
Имплементација Јава Куеуе
Програм у наставку приказује методе о којима смо горе говорили.
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); } }
Излаз:
Елементи у реду: (10, 20, 30, 40, 50)
Елемент уклоњен из реда: 10
Шеф реда: 20
Анкета (): Враћени шеф реда: 20
пеек (): Шеф реда: 30
Коначни ред: (30, 40, 50)
Имплементација низа Јава Куеуе
Имплементација редова није тако једноставна као имплементација стека. Прво, ред садржи два показивача, задњи и предњи. Такође, различите операције се раде на два различита краја.
Да бисмо имплементирали ред помоћу низова, прво декларишемо низ који ће садржати н броја елемената реда.
Затим дефинишемо следеће операције које ће се извршити у овом реду.
# 1) Ред: Операција за уметање елемента у ред је Енкуеуе (функција куеуеЕнкуеуе у програму). За уметање елемента на задњем крају прво треба да проверимо да ли је ред пун. Ако је пун, тада не можемо убацити елемент. Ако је задњи # 2) Декуеуе: Операција брисања елемента из реда је Декуеуе (функција куеуеДекуеуе у програму). Прво проверавамо да ли је ред празан. Да би операција декуеуе функционисала, мора да постоји најмање један елемент у реду. # 3) Предња страна: Ова метода враћа предњи део реда. # 4) Екран: Овај метод прелази ред и приказује елементе реда. Следећи Јава програм приказује примену низа у реду. Излаз: Почетни ред: Како смо у горенаведеном програму имплементирали структуру података „Редослед“ помоћу „Низова“, редослед можемо применити и помоћу повезане листе. У овом програму ћемо применити исте методе енкуеуе, декуеуе, фронт и дисплаи. Разлика је у томе што ћемо уместо Арраи користити структуру података повезане листе. Програм у наставку приказује имплементацију повезаног списка реда у Јави. Излаз: Елемент 6 је додат у ред БлоцкингКуеуе је интерфејс додан у Јави 1.5 и део је јава.утил.цонцуррент пакет. Овај интерфејс уводи блокирање у случају да је БлоцкингКуеуе пун или празан. Стога, када нит приступа реду и покушава да убаци (енкуеуе) елементе у ред који је већ попуњен, блокира се док друга нит не створи простор у реду (можда операцијом декуеуе или брисањем реда). Слично томе, у случају уклањања из редова, операција је блокирана ако је ред празан док елемент не постане доступан за операцију уклањања редова. Методе БлоцкингКуеуе користе неки облик контроле паралелности попут унутрашњих брава и атомске су. БлоцкингКуеуе је истовремени ред који истовремено управља операцијама реда. БлоцкингКуеуе је приказан испод: Имајте на уму да БлоцкингКуеуе не прихвата нулл вредности. Покушај уметања нулл вредности у ред доводи до НуллПоинтерЕкцептион. Неке од имплементација БлоцкингКуеуе које се пружају у Јави су ЛинкедБлоцкингКуеуе, ПриоритиБлоцкингКуеуе, АрраиБлоцкингКуеуе и СинцхоноусКуеуе. Све ове имплементације су заштићене од нити. БлоцкингКуеуес су две врсте: У ограниченом реду, капацитет реда се преноси конструктору реда. Изјава о реду је следећа: БлоцкингКуеуе блоцкингКуеуе = ново ЛинкедБлоцкингДекуе (5); У неограниченом реду не постављамо експлицитно капацитет реда и он може да расте. Капацитет је подешен на Интегер.МАКС_ВАЛУЕ. Изјава о неограниченом реду је следећа: БлоцкингКуеуе блоцкингКуеуе = ново ЛинкедБлоцкингДекуе (); Интерфејс БлоцкингКуеуе се првенствено користи за проблеме произвођача-потрошача у којима произвођач производи ресурсе, а потрошач троши ресурсе. П # 1) Шта је ред у Јави? Одговор: Ред чекања у Јави је линеарна уређена структура података која следи ФИФО (Фирст Ин, Фирст Оут) уређивање елемената. То значи да ће елемент који је први уметнут у ред бити први елемент који ће бити уклоњен. У Јави је ред имплементиран као интерфејс који наслеђује интерфејс Цоллецтион. К # 2) Да ли је Јава заштићена нитима у реду? Одговор: Нису сви редови безбедни за нити, али БлоцкингКуеуес у Јави су безбедни за нити. К # 3) Шта је брже - Стацк или Ред? Одговор: Сток је бржи. У слогу, елементи се обрађују само с једног краја, стога није потребно померање. Али у реду, елементи морају бити померени и прилагођени, јер постоје два различита показивача за уметање и брисање елемената. К # 4) Које су врсте реда? Одговор: Редови су следећих врста: К # 5) Зашто се користи Ред? Одговор: Структура података о реду се користи у сврхе синхронизације. Ред се користи и за планирање диска и ЦПУ-а. У овом упутству смо разговарали о једноставним редовима, заједно са њиховим детаљима као што су декларације, имплементација иницијализације и методе. Такође смо сазнали о имплементацији Арраи и ЛинкедЛист Куеуе у Јави. У нашим предстојећим водичима детаљно ћемо размотрити више врста редова. => Овде проверите СВЕ Јава туторијале. 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
Ред је празан
Ред након операције енкуеуе:
10 = 30 = 50 = 70 =
Предњи елемент реда: 10
Ред је пун
10 = 30 = 50 = 70 =
Ред након две операције уклањања из реда: 50 = 70 =
Предњи елемент реда: 50Имплементација повезане листе Јава Куеуе
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(); } }
Елемент 3 је додат у ред
Предњи део: 6 Задњи део: 3
Елемент 12 је додат у ред
У ред је додат елемент 24
Елемент 6 уклоњен из реда
Елемент 3 уклоњен из реда
Елемент 9 је додат у ред
Предњи део: 12 Задњи део: 9БлоцкингКуеуе у Јави
Типови реда блокирања
Ограничени ред
Неограничени ред
вишедимензионални низови у јави
Често постављана питања
Закључак
Препоручено читање