Java PriorityQueue

У цьому посібнику ми дізнаємося про клас PriorityQueue рамки колекцій Java за допомогою прикладів.

PriorityQueueКлас забезпечує функціональність купи структури даних.

Він реалізує інтерфейс черги.

На відміну від звичайних черг, елементи черги пріоритету отримуються у відсортованому порядку.

Припустимо, ми хочемо отримати елементи у порядку зростання. У цьому випадку головою черги пріоритетів буде найменший елемент. Після отримання цього елемента наступним найменшим елементом буде голова черги.

Важливо зазначити, що елементи черги пріоритетів можуть не сортуватися. Однак елементи завжди отримуються у відсортованому порядку.

Створення черги пріоритетів

Для того, щоб створити пріоритетну чергу, ми повинні імпортувати java.util.PriorityQueueпакет. Як тільки ми імпортуємо пакет, ось як ми можемо створити пріоритетну чергу в Java.

 PriorityQueue numbers = new PriorityQueue(); 

Тут ми створили пріоритетну чергу без будь-яких аргументів. У цьому випадку головка черги пріоритетів є найменшим елементом черги. І елементи видаляються у порядку зростання із черги.

Однак ми можемо налаштувати порядок елементів за допомогою Comparatorінтерфейсу. Про це ми дізнаємось пізніше у цьому підручнику.

Методи PriorityQueue

PriorityQueueКлас забезпечує реалізацію всіх методів , присутніх в Queueінтерфейсі.

Вставити елементи в PriorityQueue

  • add()- Вставляє вказаний елемент у чергу. Якщо черга заповнена, видається виняток.
  • offer()- Вставляє вказаний елемент у чергу. Якщо черга заповнена, вона повертається false.

Наприклад,

 import java.util.PriorityQueue; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue numbers = new PriorityQueue(); // Using the add() method numbers.add(4); numbers.add(2); System.out.println("PriorityQueue: " + numbers); // Using the offer() method numbers.offer(1); System.out.println("Updated PriorityQueue: " + numbers); ) ) 

Вихідні дані

 PriorityQueue: (2, 4) Оновлена ​​PriorityQueue: (1, 4, 2) 

Тут ми створили пріоритетну чергу з іменами номера. Ми вставили 4 та 2 у чергу.

Хоча 4 вставляється перед 2, головка черги дорівнює 2. Це тому, що головка черги пріоритетів є найменшим елементом черги.

Потім ми вставили 1 у чергу. Тепер черга переставлена ​​для зберігання найменшого елемента 1 у заголовку черги.

Доступ до елементів PriorityQueue

Для доступу до елементів із черги пріоритетів ми можемо використовувати peek()метод. Цей метод повертає заголовок черги. Наприклад,

 import java.util.PriorityQueue; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue numbers = new PriorityQueue(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.println("PriorityQueue: " + numbers); // Using the peek() method int number = numbers.peek(); System.out.println("Accessed Element: " + number); ) ) 

Вихідні дані

 PriorityQueue: (1, 4, 2) Елемент доступу: 1 

Видаліть елементи PriorityQueue

  • remove() - видаляє вказаний елемент із черги
  • poll() - повертає і видаляє керівника черги

Наприклад,

 import java.util.PriorityQueue; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue numbers = new PriorityQueue(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.println("PriorityQueue: " + numbers); // Using the remove() method boolean result = numbers.remove(2); System.out.println("Is the element 2 removed? " + result); // Using the poll() method int number = numbers.poll(); System.out.println("Removed Element Using poll(): " + number); ) ) 

Вихідні дані

PriorityQueue: (1, 4, 2) Чи вилучено елемент 2? true Видалений елемент за допомогою опитування (): 1

Ітерація над чергою пріоритетів

Для перебору елементів черги пріоритетів ми можемо використовувати iterator()метод. Для використання цього методу ми повинні імпортувати java.util.Iteratorпакет. Наприклад,

 import java.util.PriorityQueue; import java.util.Iterator; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue numbers = new PriorityQueue(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.print("PriorityQueue using iterator(): "); //Using the iterator() method Iterator iterate = numbers.iterator(); while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Вихідні дані

 PriorityQueue з використанням ітератора (): 1, 4, 2, 

Інші методи PriorityQueue

Методи Описи
contains(element) Шукає чергу пріоритетів для вказаного елемента. Якщо елемент знайдено, він повертається true, якщо ні - повертається false.
size() Повертає довжину черги пріоритетів.
toArray() Перетворює чергу пріоритетів у масив і повертає його.

Компаратор PriorityQueue

У всіх наведених вище прикладах елементи черги пріоритету отримуються у природному порядку (за зростанням). Однак ми можемо налаштувати це замовлення.

Для цього нам потрібно створити власний клас порівняння, який реалізує Comparatorінтерфейс. Наприклад,

 import java.util.PriorityQueue; import java.util.Comparator; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue numbers = new PriorityQueue(new CustomComparator()); numbers.add(4); numbers.add(2); numbers.add(1); numbers.add(3); System.out.print("PriorityQueue: " + numbers); ) ) class CustomComparator implements Comparator ( @Override public int compare(Integer number1, Integer number2) ( int value = number1.compareTo(number2); // elements are sorted in reverse order if (value> 0) ( return -1; ) else if (value < 0) ( return 1; ) else ( return 0; ) ) ) 

Вихідні дані

 Черга пріоритетів: (4, 3, 1, 2) 

У наведеному вище прикладі ми створили чергу пріоритетів, передаючи клас CustomComparator як аргумент.

Клас CustomComparator реалізує Comparatorінтерфейс.

Потім ми замінюємо compare()метод. Тепер метод викликає найбільше число заголовка елемента.

Щоб дізнатись більше про компаратор, відвідайте Java Comparator.

Цікаві статті...