Інтерфейс черги на Java
Інтерфейс черги є частиною java.util пакет і розширює Інтерфейс колекції . Він зберігає та обробляє дані в порядку, де елементи додаються ззаду і видаляються з фронту.
Основні особливості
- Замовлення FIFO: Елементи обробляються в тому порядку, в якому вони були вставлені (перший у першому).
- Немає випадкового доступу: На відміну від елементів списку не можна отримати безпосередньо за допомогою індексу.
- Кілька варіантів: Включає пріоритетні реалізації Deque Arraydeque та LinkedList.
- Два набори методів: Версії для виведення (додайте елемент видалити) та безпечні версії (пропонують опитування Peek).
Декларація інтерфейсу черги Java
Інтерфейс черги оголошується як:
Публічна черга інтерфейсу розширює колекцію
Ми не можемо створити чергу безпосередньо, оскільки це інтерфейс. Тут ми можемо використовувати такий клас, як LinkedList або PriorityQueue, який реалізує цей інтерфейс.
Черга
черга = новий LinkedList ();
Тепер давайте спочатку пройдемо простий приклад, тоді ми глибоко зануримось у статтю.
Приклад: Основна черга за допомогою LinkedList
Java import java.util.LinkedList ; import java.util.Queue ; public class Geeks { public static void main ( String args [] ) { // Create a Queue of Integers using LinkedList Queue < Integer > q = new LinkedList <> (); System . out . println ( 'Queue elements: ' + q ); } }
Випуск
Queue elements: []
Будучи інтерфейсом, черга потребує конкретного класу для декларації, а найпоширенішими класами є Обертання і LinkedList в Яві. Зауважте, що жодна з цих реалізацій не є безпечною. Пріоритетний крок є однією альтернативною реалізацією, якщо потрібна реалізація, що не захищається від потоків.
Створення об'єктів черги
Черга - це інтерфейс, тому об'єкти не можуть бути створені черги типу. Нам завжди потрібен клас, який розширює цей список, щоб створити об'єкт. А також після введення Генерик У Java 1.5 можна обмежити тип об'єкта, який можна зберігати в черзі. Цю безпечну чергу можна визначити як:
Java // Obj is the type of the object to be stored in Queue Queue < Obj > queue = new PriorityQueue < Obj > ();
Поширені методи
Інтерфейс черги забезпечує кілька методів додавання вилучення та огляду елементів у черзі. Ось кілька найбільш часто використовуваних методів:
- Додати (елемент) : Додає елемент до задньої частини черги. Якщо черга повна, вона кидає виняток.
- Пропозиція (елемент): Додає елемент до задньої частини черги. Якщо черга повна, вона повертає помилкову.
- Видалити () : Видаляє і повертає елемент на передній частині черги. Якщо черга порожня, вона кидає виняток.
- опитування (): Видаляє і повертає елемент на передній частині черги. Якщо черга порожня, вона повертає NULL.
- Елемент (): Повертає елемент на передній частині черги, не знімаючи її. Якщо черга порожня, вона кидає виняток.
- peek () : Повертає елемент на передній частині черги, не знімаючи її. Якщо черга порожня, вона повертає NULL.
Приклад 1: Цей приклад демонструє оперативні операції в черзі.
Java import java.util.LinkedList ; import java.util.Queue ; public class Geeks { public static void main ( String [] args ) { Queue < String > queue = new LinkedList <> (); // add elements to the queue queue . add ( 'apple' ); queue . add ( 'banana' ); queue . add ( 'cherry' ); System . out . println ( 'Queue: ' + queue ); // remove the element at the front of the queue String front = queue . remove (); System . out . println ( 'Removed element: ' + front ); // print the updated queue System . out . println ( 'Queue after removal: ' + queue ); // add another element to the queue queue . add ( 'date' ); // peek at the element at the front of the queue String peeked = queue . peek (); System . out . println ( 'Peeked element: ' + peeked ); // print the updated queue System . out . println ( 'Queue after peek: ' + queue ); } }
Випуск
Queue: [apple banana cherry] Removed element: apple Queue after removal: [banana cherry] Peeked element: banana Queue after peek: [banana cherry date]
Приклад 2 :
Java import java.util.LinkedList ; import java.util.Queue ; public class Geeks { public static void main ( String [] args ){ Queue < Integer > q = new LinkedList <> (); // Adds elements {0 1 2 3 4} to the queue for ( int i = 0 ; i < 5 ; i ++ ) q . add ( i ); // Display contents of the queue System . out . println ( 'Elements of queue: ' + q ); // To remove the head of queue int removedele = q . remove (); System . out . println ( 'Removed element:' + removedele ); System . out . println ( q ); // To view the head of queue int head = q . peek (); System . out . println ( 'Head of queue:' + head ); // Rest all methods of collection interface like size and contains can be used with this implementation. int size = q . size (); System . out . println ( 'Size of queue:' + size ); } }
Випуск
Elements of queue: [0 1 2 3 4] Removed element:0 [1 2 3 4] Head of queue:1 Size of queue:4
Заняття, які реалізують інтерфейс черги
1. Пріоритет
Пріоритетний клас дозволяє нам обробляти елементи на основі їх пріоритету замість звичайного порядку FIFO звичайної черги. Це корисно, коли елементи повинні оброблятися в пріоритетному порядку. Ось як ми можемо створити чергу за допомогою цього класу.
Приклад:
Java import java.util.* ; class Geeks { public static void main ( String args [] ){ // Creating empty priority queue Queue < Integer > pq = new PriorityQueue < Integer > (); // Adding items to the pQueue using add() pq . add ( 10 ); pq . add ( 20 ); pq . add ( 15 ); // Printing the top element of the PriorityQueue System . out . println ( pq . peek ()); // Printing the top element and removing it the PriorityQueue container System . out . println ( pq . poll ()); // Printing the top element again System . out . println ( pq . peek ()); } }
Випуск
10 10 15
2. LinkedList
LinkedList - це лінійна структура даних, де елементи зберігаються як окремі об'єкти, кожен з яких містить дані та посилання на наступний елемент. Елементи з'єднуються за допомогою покажчиків, не зберігаються в безперервній пам'яті. Ось як ми можемо створити чергу за допомогою цього класу.
Приклад:
Java import java.util.* ; class Geeks { public static void main ( String args [] ) { // Creating empty LinkedList Queue < Integer > ll = new LinkedList < Integer > (); // Adding items to the ll using add() ll . add ( 10 ); ll . add ( 20 ); ll . add ( 15 ); // Printing the top element of the LinkedList System . out . println ( ll . peek ()); // Printing the top element and removing it from the LinkedList container System . out . println ( ll . poll ()); // Printing the top element again System . out . println ( ll . peek ()); } }
Випуск
10 10 20
3. Пріоритетне цукерки
Пріоритетне Bockingqueue-це бездоганна блокуюча черга, яка замовляє елементи, як пріоритет, і підтримує блокування пошуку. Оскільки це необмежено, що додавання елементів все ще може провалюватися, якщо пам'ять закінчиться. Ось як створити чергу за допомогою цього класу.
Приклад:
Java import java.util.concurrent.PriorityBlockingQueue ; import java.util.* ; class Geeks { public static void main ( String args [] ) { // Creating empty priority blocking queue Queue < Integer > pbq = new PriorityBlockingQueue < Integer > (); // Adding items to the pbq using add() pbq . add ( 10 ); pbq . add ( 20 ); pbq . add ( 15 ); // Printing the top element of the PriorityBlockingQueue System . out . println ( pbq . peek ()); // Printing the top element and removing it from the PriorityBlockingQueue System . out . println ( pbq . poll ()); // Printing the top element again System . out . println ( pbq . peek ()); } }
Випуск
10 10 15
Різні операції на інтерфейсі черги за допомогою класу пріоритетних
1. Додавання елементів
Щоб додати елемент у чергу, ми можемо використовувати Додати () метод . Порядок вставки не зберігається в пріоритетних. Елементи зберігаються на основі пріоритетного порядку, який піднімається за замовчуванням.
Приклад:
Java import java.util.* ; public class Geeks { public static void main ( String args [] ) { Queue < String > pq = new PriorityQueue <> (); pq . add ( 'Geeks' ); pq . add ( 'For' ); pq . add ( 'Geeks' ); System . out . println ( pq ); } }
Випуск
[For Geeks Geeks]
2. Видалення елементів
Щоб видалити елемент з черги, ми можемо використовувати Видалити () метод. Якщо є кілька об'єктів, то перша поява об'єкта видаляється. З опитування () метод також використовується для зняття голови та повернення її.
Приклад:
Java import java.util.* ; public class Geeks { public static void main ( String args [] ) { Queue < String > pq = new PriorityQueue <> (); pq . add ( 'Geeks' ); pq . add ( 'For' ); pq . add ( 'Geeks' ); System . out . println ( 'Initial Queue: ' + pq ); pq . remove ( 'Geeks' ); System . out . println ( 'After Remove: ' + pq ); System . out . println ( 'Poll Method: ' + pq . poll ()); System . out . println ( 'Final Queue: ' + pq ); } }
Випуск
Initial Queue: [For Geeks Geeks] After Remove: [For Geeks] Poll Method: For Final Queue: [Geeks]
3. Ітерування черги
Існує кілька способів ітерати через чергу. Найвідоміший спосіб - це перетворення черги в масив і проходження за допомогою для циклу . У черзі також є вбудований ітератор, який можна використовувати для ітерації через чергу.
Приклад:
Java import java.util.* ; public class Geeks { public static void main ( String args [] ) { Queue < String > pq = new PriorityQueue <> (); pq . add ( 'Geeks' ); pq . add ( 'For' ); pq . add ( 'Geeks' ); Iterator iterator = pq . iterator (); while ( iterator . hasNext ()) { System . out . print ( iterator . next () + ' ' ); } } }
Випуск
For Geeks Geeks
Методи інтерфейсу черги
Ось повний список методів для черги
| Метод | Опис |
|---|---|
| Boolean Add (E E) | Елемент вставки; кидає виняток, якщо він заповнений. |
| Булева пропозиція (E E) | Елемент вставки; Повертає помилково, якщо повне. |
| E Видалити () | Видаляє голову; кидає виняток, якщо порожній. |
| E опитування () | Видаляє голову; Повертає null, якщо порожній. |
| І елемент () | Отримує голову; кидає виняток, якщо порожній. |
| E peek () | Отримує голову; Повертає null, якщо порожній. |
| Boolean Addall (колекція extends E>в) | Додає всі елементи з іншої колекції. |
| void clear () | Видаляє всі елементи. |
| Boolean містить (об'єкт O) | Перевіряє, чи існує елемент. |
| Boolean містить (колекція >в) | Перевіряє, чи існують усі елементи. |
| Boolean equals (об'єкт o) | Порівняється з іншою колекцією. |
| int hashcode () | Повертає хеш -код. |
| boolean isempty () | Перевіряє, чи порожня колекція. |
| Ітератор | Повертає ітератор для елементів. |
| Boolean Видалити (об'єкт O) | Видаляє конкретний елемент. |
| Boolean Removeall (колекція >в) | Видаляє всі відповідні елементи. |
| Boolean rathainall (колекція >в) | Зберігає лише вказані елементи. |
| int size () | Повертає кількість елементів. |
| Об'єкт [] toArray () | Повертає елементи як масив. |
| | Повертає елементи як набраний масив. |
| за замовчуванням void foreach (споживач super E>Дія) | Виконує дію для кожного елемента. |
| за замовчуванням void foreach (споживач super E>Дія) | Виконує дію для кожного елемента. |
| Spiterator за замовчуванням | Повертає Spiterator. |
| Потік за замовчуванням | Повертає послідовний потік. |
| Потік за замовчуванням | Повертає паралельний потік. |