Інтерфейс черги є частиною java.util пакет і розширює Інтерфейс колекції . Він зберігає та обробляє дані в порядку, де елементи додаються ззаду і видаляються з фронту.
Основні особливості
- Замовлення FIFO: Елементи обробляються в тому порядку, в якому вони були вставлені (перший у першому).
- Немає випадкового доступу: На відміну від елементів списку не можна отримати безпосередньо за допомогою індексу.
- Кілька варіантів: Включає пріоритетні реалізації Deque Arraydeque та LinkedList.
- Два набори методів: Версії для виведення (додайте елемент видалити) та безпечні версії (пропонують опитування Peek).
Декларація інтерфейсу черги Java
Інтерфейс черги оголошується як:
Публічна черга інтерфейсу розширює колекцію
Ми не можемо створити чергу безпосередньо, оскільки це інтерфейс. Тут ми можемо використовувати такий клас, як LinkedList або PriorityQueue, який реалізує цей інтерфейс.
Черга
черга = новий LinkedList (); для циклів java
Тепер давайте спочатку пройдемо простий приклад, тоді ми глибоко зануримось у статтю.
Приклад: Основна черга за допомогою LinkedList
Javaimport 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: Цей приклад демонструє оперативні операції в черзі.
Javaimport 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 :
Javaimport 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 - це лінійна структура даних, де елементи зберігаються як окремі об'єкти, кожен з яких містить дані та посилання на наступний елемент. Елементи з'єднуються за допомогою покажчиків, не зберігаються в безперервній пам'яті. Ось як ми можемо створити чергу за допомогою цього класу.
Приклад:
Javaimport 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-це бездоганна блокуюча черга, яка замовляє елементи, як пріоритет, і підтримує блокування пошуку. Оскільки це необмежено, що додавання елементів все ще може провалюватися, якщо пам'ять закінчиться. Ось як створити чергу за допомогою цього класу.
js багаторядковий рядок
Приклад:
Javaimport 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. Додавання елементів
Щоб додати елемент у чергу, ми можемо використовувати Додати () метод . Порядок вставки не зберігається в пріоритетних. Елементи зберігаються на основі пріоритетного порядку, який піднімається за замовчуванням.
Приклад:
Javaimport 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. Видалення елементів
Щоб видалити елемент з черги, ми можемо використовувати Видалити () метод. Якщо є кілька об'єктів, то перша поява об'єкта видаляється. З опитування () метод також використовується для зняття голови та повернення її.
Приклад:
Javaimport 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. Ітерування черги
Існує кілька способів ітерати через чергу. Найвідоміший спосіб - це перетворення черги в масив і проходження за допомогою для циклу . У черзі також є вбудований ітератор, який можна використовувати для ітерації через чергу.
Приклад:
метод tostringJava
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. |
| Потік за замовчуванням | Повертає послідовний потік. |
| Потік за замовчуванням | Повертає паралельний потік. |