java priority queue tutorial implementation examples
Овај водич објашњава Јава приоритетни ред и сродне концепте попут упоредног, мин и максималног приоритета, заједно са његовом применом са примерима:
Структура података о приоритетном реду је посебан ред у којем су елементи присутни не према ФИФО редоследу, већ према природним елементима или било ком прилагођеном упоређивачу који се користи током стварања реда.
=> Овде погледајте водич за почетнике Јава.
Шта ћете научити:
Редослед приоритета у Јави
У приоритетном реду, предњи део реда има најмање елемената према природном редоследу, а задњи део је уперен на највећи елемент у реду.
Пример Приоритетног реда који се састоји од бројева приказан је испод.
техничка питања и одговори на интервју за помоћ
Дакле, када се елемент уклони из приоритетног реда приказаног горе, то ће бити најмањи елемент.
Слично томе, за абецедни ред приоритета, АСЦИИ вредности ће се узети у обзир и елементи реда ће се поредати према АСЦИИ вредностима.
У наставку су наведене неке од главних карактеристика ПриоритиКуеуе:
- ПриоритиКуеуе је невезани ред.
- ПриоритиКуеуе не дозвољава нулл вредности.
- За неупоредиве објекте не можемо створити приоритетни ред.
- ПриоритиКуеуе наслеђује из класа као што су АбстрацтКуеуе, АбстрацтЦоллецтион, Цоллецтион и Објецт.
- Глава или предњи део реда садржи најмање елемената према природном редоследу.
- Имплементација приоритета реда није сигурна у нитима. Стога, ако желимо синхронизовани приступ, требало би да користимо ПриоритиБлоцкингКуеуе.
Класа ПриоритиКуеуе наслеђује Јава Куеуе Интерфаце и део је пакета јава.утил.
Општа изјава класе ПриоритиКуеуе дата је у наставку:
public class PriorityQueue extends AbstractQueue implements Serializable
Дијаграм испод приказује хијерархију класе за класу ПриоритиКуеуе.
Сложеност времена приоритета
- Временска сложеност приоритета реда за уметање (енкуеуе) и брисање (декуеуе) методе је О (лог (н)).
- Приоритетни ред има линеарну временску сложеност за уклањање, као и садржи методе.
- Методе којима се преузимају елементи из реда приоритета имају сталну временску сложеност.
Пример приоритетног реда у Јави
Програм у наставку приказује једноставан ПриоритиКуеуе у Јави. Креирамо објекат класе ПриоритиКуеуе, додамо јој вредности, а затим приказујемо садржај реда помоћу Итератора.
import java.util.*; class Main{ public static void main(String args()){ PriorityQueue cities_queue=new PriorityQueue(); //initialize the PriorityQueue with values cities_queue.add('Sydney'); cities_queue.add('Venice'); cities_queue.add('New York'); cities_queue.add('California'); cities_queue.add('Melbourne'); //print the head of the PriorityQueue System.out.println('PriorityQueue Head:'+cities_queue.element()); //Define the iterator for PriorityQueue and print its elements System.out.println('
PriorityQueue contents:'); Iterator iter=cities_queue.iterator(); while(iter.hasNext()){ System.out.print(iter.next() + ' '); } } }
Излаз:
Јава Приорити Куеуе АПИ методе
Конструктори:
Прототип конструктора | Опис | |
---|---|---|
завирити | Е пеек () | Враћа главу реда без брисања елемента. |
ПриоритиКуеуе () | Подразумевани конструктор који креира објекат ПриоритиКуеуе са почетним капацитетом као 1. | |
ПриоритиКуеуе (Збирка ц) | Креира објект ПриоритиКуеуе са почетним елементима из дате колекције ц. | |
ПриоритиКуеуе (инт ИнитиалЦапацити) | Ствара објекат ПриоритиКуеуе са задатим „ИнитиЦапацити“. Елементи су поредани према природном редоследу. | |
ПриоритиКуеуе (инт ИнитиалЦапацити, упоређивач упоређивача) | Ствара објекат ПриоритиКуеуе са задатим „ИнитиЦапацити“. Елементи су поређани према датом упоређивачу. | |
ПриоритиКуеуе (ПриоритиКуеуе ц) | Ствара објекат ПриоритиКуеуе од другог објекта ПриоритиКуеуе који даје ц. | |
ПриоритиКуеуе (СортедСет ц) | Ствара објект ПриоритиКуеуе из СортедСет датог од ц. |
Методе
Метод | Прототип методе | Опис |
---|---|---|
додати | логички додатак (Е е) | Додаје елемент е у ПриоритиКуеуе. |
јасно | воид цлеар () | Брише ПриоритиКуеуе брисањем свих елемената. |
упоређивач | Цомпараторцомпаратор () | Враћа прилагођени упоређивач који се користи за редослед елемената у реду. |
садржи | боолеан садржи (објекат о) | Проверава да ли ПриоритиКуеуе садржи дати елемент о. Враћа тачно ако је одговор да. |
итератор | Итераторитератор () | Метода за добивање итератора за дати ПриоритиКуеуе. |
понуда | логичка понуда (Е е) | Уметните дати елемент е у ПриоритиКуеуе. |
анкета | Е анкета () | Уклања и враћа главу реда. Враћа нулу ако је ред празан. |
уклонити | логичко уклањање (објекат о) | Уклања инстанцу датог елемента о ако је присутан у реду. |
величина | инт величина () | Враћа величину или број елемената у овом ПриоритиКуеуе. |
тоАрраи | Објецт () тоАрраи () | Враћа приказ низа датог ПриоритиКуеуе. |
тоАрраи | Т () доАрраи (Т () а) | Враћа приказ низа за дати приоритетни ред са истим типом времена извођења као наведени низ а. |
Имплементација у Јави
Покажимо горенаведене методе ПриоритиКуеуе помоћу Јава програма.
import java.util.*; class Main { public static void main(String args()) { // Creating empty priority queue PriorityQueue numQueue = new PriorityQueue(); // add elements to numQueue using add() numQueue.add('Five'); numQueue.add('One'); numQueue.add('Seven'); numQueue.add('Three'); numQueue.add('Eleven'); numQueue.add('Nine'); // Print the head element using Peek () method System.out.println('Head element using peek method:' + numQueue.peek()); // Printing all elements System.out.println('
The PriorityQueue elements:'); Iterator iter1 = numQueue.iterator(); while (iter1.hasNext()) System.out.print(iter1.next() + ' '); // remove head with poll () numQueue.poll(); System.out.println('
After removing an element' + 'with poll function:'); Iterator iter2 = numQueue.iterator(); while (iter2.hasNext()) System.out.print(iter2.next() + ' '); // Remove 'Three' using remove () numQueue.remove('Three'); System.out.println('
Element 'Three' with' + ' remove function:'); Iterator iter3 = numQueue.iterator(); while (iter3.hasNext()) System.out.print(iter3.next() + ' '); // Check if an element is present in PriorityQueue using contains() boolean ret_val = numQueue.contains('Five'); System.out.println('
Priority queue contains 'Five' ' + 'or not?: ' + ret_val); // get array equivalent of PriorityQueue with toArray () Object() numArr = numQueue.toArray(); System.out.println('
Array Contents: '); for (int i = 0; i Излаз:
питања и одговори за интервјуа аналитичара квалитета пдф

Редослед приоритета у Јави 8
Јава 8 додаје још један метод у класу ПриоритиКуеуе, тј. „Сплитератор ()“.
Детаљи ове методе дати су у наставку.
Назив методе: цепач
Прототип методе: јавни завршни сплитератор сплитератор ()
Опис методе: Ова метода креира сплитератор преко елемената ПриоритиКуеуе. Овај сплитератор касно веже и брзо отказује.
Приоритетни поредак редова
Као што је већ поменуто, елементи ПриоритиКуеуе су природно поредани. Ако желимо да променимо редослед, требало би да наведемо компаратор и користимо га током креирања објекта ПриоритиКуеуе. Тада ПриоритиКуеуе користи овај упоређивач за наручивање његових елемената.
Доле наведени Јава програм показује употребу прилагођеног упоређивача за наручивање елемената. У овом програму дефинишемо нови прилагођени компаратор унутар којег надјачавамо методу ‘упоређивања’. Метода упоређивања користи се за уређивање елемената ПриоритиКуеуе према дужини.
import java.util.*; public class Main { public static void main(String() args) { // A custom comparator that compares two Strings by their length. Comparator customComparator = new Comparator() { @Override public int compare(String s1, String s2) { return s1.length() - s2.length(); } }; // Create a Priority Queue with a custom Comparator PriorityQueue colorsPriorityQueue = new PriorityQueue(customComparator); // Add items to a Priority Queue colorsPriorityQueue.add('Red'); colorsPriorityQueue.add('Green'); colorsPriorityQueue.add('Blue'); colorsPriorityQueue.add('Cyan'); colorsPriorityQueue.add('Magenta'); colorsPriorityQueue.add('Yellow'); // Printing all elements System.out.println('
The PriorityQueue elements with custom Comparator:'); Iterator iter1 = colorsPriorityQueue.iterator(); while (iter1.hasNext()) System.out.print(iter1.next() + ' '); } }
Излаз:

Минимални приоритетни ред у Јави
Природно редослед Приоритетног реда има најмање или најмањи елемент на челу реда и самим тим редослед је узлазан. То се назива „Минимални ред приоритета“ са растућим редоследом елемената.
Јава програм у наставку приказује примену Мин Приорити Куеуе у Јави.
import java.util.*; class Main{ public static void main(String args()){ //declare a PriorityQueue object with default ordering PriorityQueue pq = new PriorityQueue(); //add element to the PriorityQueue pq.add(8); pq.add(6); pq.add(4); pq.add(2); pq.add(12); pq.add(10); //display the min PriorityQueue System.out.println('The min Priority Queue (natural ordering) contents:'); Integer val = null; while( (val = pq.poll()) != null) { System.out.print(val + ' '); } } }
Излаз:

Мак Приорити Ред у Јави
Док ред са минималним приоритетом има елементе у растућем редоследу, ред са максималним приоритетом има елементе у опадајућем редоследу, тј. Глава реда са максималним приоритетом враћа највећи елемент у реду.
Јава програм у наставку приказује Мак Приорити Ред у Јави.
import java.util.*; class Main{ public static void main(String args()){ //declare a PriorityQueue object with custom comparator to generate max PQ PriorityQueue pq = new PriorityQueue(new Comparator() { public int compare(Integer lhs, Integer rhs) { if (lhs Излаз:
проследи низ методу јава

Као што је приказано у горњем програму, да бисмо променили природни редослед елемената у реду приоритета, морамо дефинисати прилагођени упоређивач.
Често постављана питања
П # 1) Који је приоритетни ред у Јави?
Одговор: Посебни ред у коме су сви елементи реда поредани према природном наручивању или помоћу прилагођеног упоређивача назива се приоритетни ред. Не следи ФИФО наредбу.
П # 2) Како постављате Мак Приорити ред у Јави?
Одговор: Можемо поставити Мак Приорити Ред у Јави помоћу прилагођеног упоређивача тако да ће глава реда враћати највећи елемент у реду.
П # 3) Да ли Приоритетни ред дозвољава дупликате Јаве?
Одговор: Да. Приоритетни ред дозвољава дуплиране вредности.
П # 4) Да ли је Јава Приорити ред максималан или минималан?
Одговор: Подразумевано је приоритетни ред у Јави мин Приоритетни ред са природним редоследом. Да би био максималан, морамо користити прилагођени упоређивач тако да глава реда враћа највећи елемент у реду.
5. питање) Да ли је приоритетни ред сортиран?
Одговор: Подразумевано се глава реда сортира, а приоритетни ред има најмање елемената као главу. Остали елементи се наручују по потреби.
Закључак
Овим је завршен водич о приоритетним редовима у Јави. Приоритетни ред имплементира интерфејс за редослед и посебан је ред у коме су елементи поређани према природном редоследу. Не следи ФИФО наредбу. Да бисмо променили природни редослед реда приоритета, можемо користити прилагођени упоређивач.
Приоритетни редови се углавном користе за распоређивање штампача, заказивање ЦПУ задатака итд. Гомила (минимална или максимална) се такође имплементира помоћу приоритетних редова.
=> Прочитајте серију Еаси Јава Траининг.
Препоручено читање
- Структура података приоритетног реда у Ц ++ са илустрацијом
- Редослед приоритета у СТЛ-у
- Јава Куеуе - Методе реда, примена редова са примерима
- Ц ++ Структура података кружног реда: Примена и примене
- Двокрачни ред (Декуе) у Ц ++ са примерима
- Структура података у реду у Ц ++ са илустрацијом
- Низови и редови у СТЛ-у
- Водич за ЈАВА за почетнике: 100+ практичних Јава видео водича