PriorityQueue дозволяє реалізувати чергу на основі пріоритету. Така черга може бути корисна, наприклад, у разі необхідності обслуговування клієнтів згідно пріоритету. При зберіганні чисел в пріоритетній черзі, така черга гарантує, що першим елементом завжди буде найменший елемент. При цьому не гарантується ніякий стабільний послідовний порядок збереження елементів. Після додавання або видалення елементу з пріоритетної черги, порядок зберігання елементів в цій черзі змінюється таким чином, що в голові черги опиняється найменший елемент згідно його природнього порядку або згідно заданого компаратора.
PriorityQueue має наступні конструктори:
PriorityQueue не може містити null. PriorityQueue розширює AbstractQueue та реалізує інтерфейси Serializable, Iterable, Collection, Queue.
Реалізація інтерфейсу Queue говорить нам, що в PriorityQueue доступні такі методи роботи з чергою:
Крім того в PriorityQueue доступні методи, що наявні і в інших колекціях як то: clear(), comparator(), contains(), iterator(), spliterator(), size(), toArray() тощо.
Приклад:
Результат:
PriorityQueue має наступні конструктори:
PriorityQueue() //початковий об’єм становить 11 PriorityQueue(int початковий_об’єм) PriorityQueue(Comparator comparator) PriorityQueue(int початковий_об'єм, Comparator компаратор) PriorityQueue(Collection с) PriorityQueue(PriorityQueue с) PriorityQueue(SortedSet с)Таким чином в разі потреби можна задати власний компаратор для видачі елементів у потрібному нам порядку.
PriorityQueue не може містити null. PriorityQueue розширює AbstractQueue та реалізує інтерфейси Serializable, Iterable, Collection, Queue.
Реалізація інтерфейсу Queue говорить нам, що в PriorityQueue доступні такі методи роботи з чергою:
- add(E e) – додати вказаний елемент у чергу
- element() – отримати, але не видаляти, елемент з голови черги
- offer(E e)- додати визначений елемент у чергу
- peek() – отримати елемент з голови черги, але не видаляти його. Повертає null, якщо черга порожня
- poll() – отримати та видалити елемент з голови черги
- remove() - отримати та видалити елемент з голови черги
Крім того в PriorityQueue доступні методи, що наявні і в інших колекціях як то: clear(), comparator(), contains(), iterator(), spliterator(), size(), toArray() тощо.
Приклад:
import java.util.PriorityQueue; public class TestPriorityQueue { public static void main(String[] args) { PriorityQueue<Integer> pq= new PriorityQueue<>(11); pq.add(750); pq.add(50); pq.offer(1); pq.add(300); pq.add(25); pq.add(2); pq.offer(20); pq.add(5); pq.add(40); System.out.println("Порядок зберігання елементів"+pq); // Отримуємо і видаляємо елемент з голови черги while (!pq.isEmpty()) { System.out.println("Отримали: "+pq.poll()); System.out.println("Новий порядок:"+pq); } } }
Порядок зберігання елементів[1, 5, 2, 25, 300, 50, 20, 750, 40] Отримали: 1 Новий порядок:[2, 5, 20, 25, 300, 50, 40, 750] Отримали: 2 Новий порядок:[5, 25, 20, 750, 300, 50, 40] Отримали: 5 Новий порядок:[20, 25, 40, 750, 300, 50] Отримали: 20 Новий порядок:[25, 50, 40, 750, 300] Отримали: 25 Новий порядок:[40, 50, 300, 750] Отримали: 40 Новий порядок:[50, 750, 300] Отримали: 50 Новий порядок:[300, 750] Отримали: 300 Новий порядок:[750] Отримали: 750 Новий порядок:[]Таким чином за допомогою методу poll() (його можна також замінити методом remove()), ми можемо отримувати елементи масиву у відсортованому порядку, незважаючи на те, що в самій пріоритетній черзі елементи зберігаються у іншому порядку.
Немає коментарів:
Дописати коментар