java priority queue tutorial implementation examples
Цей посібник пояснює чергу пріоритетів Java та пов'язані з нею концепції, такі як порівняльна, мінімальна та максимальна пріоритетні черги, а також її реалізація з прикладами:
Структура даних пріоритетної черги - це спеціальна черга, в якій елементи присутні не відповідно до порядку FIFO, а відповідно до природних елементів або будь-якого спеціального порівняльника, що використовується під час створення черги.
=> Подивіться тут посібник для початківців Java.
Що ви дізнаєтесь:
Черга пріоритетів у Java
У черзі пріоритетів передня частина черги має найменше елементів відповідно до природного впорядкування, а тильна сторона вказує на найбільший елемент черги.
Приклад черги пріоритетів, що складається з чисел, показаний нижче.
як мені знайти свій код захисту мережі - -
Таким чином, коли елемент вилучається із черги пріоритетів, показаної вище, тоді це буде найменший елемент.
Так само для черги пріоритетів за алфавітом будуть розглядатися значення ASCII, а елементи черги будуть упорядковані відповідно до значень ASCII.
Нижче перераховані деякі основні характеристики PriorityQueue:
- PriorityQueue - це необмежена черга.
- PriorityQueue не допускає нульових значень.
- Для непорівнянних об’єктів ми не можемо створити пріоритетну чергу.
- PriorityQueue успадковує від класів, таких як AbstractQueue, AbstractCollection, Collection та Object.
- Головка або передня частина черги містить найменший елемент відповідно до природного впорядкування.
- Впровадження черги пріоритетів не є безпечним для потоків. Таким чином, якщо ми хочемо синхронізованого доступу, ми повинні використовувати PriorityBlockingQueue.
Клас PriorityQueue успадковує інтерфейс черги Java і є частиною пакету java.util.
Загальна декларація класу PriorityQueue наведена нижче:
public class PriorityQueue extends AbstractQueue implements Serializable
На діаграмі нижче показано ієрархію класів для класу PriorityQueue.
Складність часу черги пріоритетів
- Складність в часі черги пріоритетів для методів вставки (чергу) та видалення (чергу) - O (журнал (n)).
- Черга пріоритетів має лінійну часову складність для видалення, а також містить методи.
- Методи, що отримують елементи черги пріоритетів, мають постійну складність у часі.
Приклад черги пріоритетів у Java
Наведена нижче програма демонструє просту пріоритетну чергу в Java. Ми створюємо об'єкт класу PriorityQueue, додаємо до нього значення, а потім відображаємо вміст Черги за допомогою Iterator.
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() + ' '); } } }
Вихід:
Методи API пріоритетної черги Java
Конструктори:
Прототип конструктора | Опис | |
---|---|---|
зазирнути | E peek () | Повертає заголовок черги без видалення елемента. |
PriorityQueue () | Конструктор за замовчуванням, який створює об'єкт PriorityQueue з початковою ємністю як 1. | |
PriorityQueue (Колекція c) | Створює об’єкт PriorityQueue з початковими елементами із заданої колекції c. | |
PriorityQueue (int initialCapacity) | Створює об’єкт PriorityQueue із заданим ‘InitiCapacity’. Елементи впорядковані відповідно до природного впорядкування. | |
PriorityQueue (int originalCapacity, компаратор-компаратор) | Створює об’єкт PriorityQueue із заданим ‘InitiCapacity’. Елементи впорядковано відповідно до заданого компаратора. | |
PriorityQueue (PriorityQueue c) | Створює об’єкт PriorityQueue з іншого об’єкта PriorityQueue, заданого c. | |
PriorityQueue (SortedSet c) | Створює об’єкт PriorityQueue із SortedSet, заданого c. |
Методи
Метод | Метод-прототип | Опис |
---|---|---|
додати | логічне додавання (E e) | Додає елемент e до PriorityQueue. |
ясно | void clear () | Очищає PriorityQueue, видаляючи всі елементи. |
компаратор | Компараторкомпаратор () | Повертає спеціальний порівняльник, що використовується для впорядкування елементів у черзі. |
містить | boolean містить (Об'єкт o) | Перевіряє, чи містить PriorityQueue заданий елемент o. Повертає true, якщо так. |
ітератор | Ітератортератор () | Метод отримання ітератора для даного PriorityQueue. |
пропозиція | логічна пропозиція (E e) | Вставте даний елемент e до PriorityQueue. |
опитування | Електронне опитування () | Видаляє та повертає заголовок черги. Повертає нуль, якщо черга порожня. |
видалити | логічне видалення (Об'єкт o) | Видаляє екземпляр даного елемента o, якщо він присутній у черзі. |
розмір | розмір int () | Повертає розмір або кількість елементів у цій черзі PriorityQue. |
toArray | Об'єкт () toArray () | Повертає представлення масиву заданого PriorityQueue. |
toArray | T () доArray (T () a) | Повертає подання масиву для даної черги пріоритетів з тим самим типом часу виконання, що і вказаний масив a. |
Впровадження в Java
Давайте продемонструємо вищезазначені методи PriorityQueue за допомогою програми Java.
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 Вихід:
яка операційна система найкраща для ноутбука

Черга пріоритетів у Java 8
Java 8 додає ще один метод до класу PriorityQueue, тобто ‘spliterator ()’.
Деталі цього методу наведені нижче.
Назва методу: спліттер
Прототип методу: загальнодоступний фінальний сплітератор ()
Опис методу: Цей метод створює сплітератор над елементами PriorityQueue. Цей шліфувальний апарат пізно зв'язується та швидко спрацьовує.
Порівняльник черг пріоритетів
Як уже зазначалося, елементи PriorityQueue є природним чином упорядкованими. Якщо ми хочемо змінити порядок, тоді слід вказати компаратор і використовувати його під час створення об’єкта PriorityQueue. Потім PriorityQueue використовує цей компаратор для впорядкування його елементів.
Наведена нижче програма Java демонструє використання спеціального компаратора для впорядкування елементів. У цій програмі ми визначаємо новий користувальницький компаратор, у якому замінюємо метод „порівняння”. Метод порівняння використовується для впорядкування елементів PriorityQueue відповідно до довжини.
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() + ' '); } }
Вихід:

Мінімальна пріоритетна черга в Java
Природне впорядкування пріоритетної черги має найменший або найменший елемент на чолі черги, і тому впорядкування зростає. Це називається “Чергою мінімальних пріоритетів” із зростанням порядку елементів.
Наведена нижче програма Java показує реалізацію черги пріоритетів у Java.
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 + ' '); } } }
Вихід:

Макс. Пріоритетна черга в Java
У той час, як у черзі мінімального пріоритету елементи знаходяться у порядку зростання, в черзі максимального пріоритету елементи знаходяться у порядку убування, тобто головка черги пріоритету Макс поверне найбільший елемент у черзі.
Наведена нижче програма Java демонструє Max Priority Queue в Java.
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 Вихід:

Як показано у наведеній вище програмі, щоб змінити природне впорядкування елементів у черзі пріоритетів, ми повинні визначити власний порівняльник.
Часті запитання
Q # 1) Яка черга пріоритетів у Java?
Відповідь: Спеціальна черга, в якій усі елементи черги впорядковані за природним замовленням або за допомогою спеціального порівняльника, називається чергою пріоритетів. Це не відповідає наказу FIFO.
Запитання №2) Як встановити чергу максимальних пріоритетів у Java?
Відповідь: Ми можемо встановити Максимальну пріоритетну чергу в Java, використовуючи спеціальний порівняльник, щоб заголовок черги повертав найбільший елемент у черзі.
Запитання №3) Чи допускає черга пріоритетів дублікати Java?
Відповідь: Так. Черга пріоритетів дозволяє повторювані значення.
Q # 4) Максимальна чи мінімальна черга пріоритету Java?
java j2ee - запитання та відповіді для досвідчених
Відповідь: За замовчуванням пріоритетна черга в Java - це мінімальна пріоритетна черга з природним упорядкуванням. Щоб зробити його максимальним, ми повинні використовувати спеціальний компаратор, щоб заголовок черги повертав найбільший елемент у черзі.
Q # 5) Чи сортується Пріоритетна Черга?
Відповідь: За замовчуванням заголовок черги сортується, а в черзі пріоритетів найменшим елементом є заголовок. Решта елементів впорядковується, коли це потрібно.
Висновок
На цьому підручник із черг пріоритетів у Java завершено. Пріоритетна черга реалізує інтерфейс черги і є спеціальною чергою, де елементи впорядковуються відповідно до природного впорядкування. Це не відповідає наказу FIFO. Щоб змінити природне впорядкування черги пріоритетів, ми можемо використовувати спеціальний порівняльник.
Черги пріоритетів в основному використовуються для планування роботи принтера, планування завдань процесора тощо. Куча (мінімальна або максимальна) також реалізується за допомогою пріоритетних черг.
=> Прочитайте серію Easy Java Training.
Рекомендована література
- Структура даних черги пріоритетів у C ++ з ілюстрацією
- Черга пріоритетів у STL
- Черга Java - методи черги, реалізація черги на прикладах
- Структура даних кругової черги C ++: Впровадження та програми
- Двостороння черга (Deque) в C ++ із прикладами
- Структура даних черги в C ++ з ілюстрацією
- Стеки та черги в STL
- Підручник JAVA для початківців: 100+ практичних навчальних посібників Java