logo

Інтерфейс черги на Java

Інтерфейс черги є частиною java.util пакет і розширює Інтерфейс колекції . Він зберігає та обробляє дані в порядку, де елементи додаються ззаду і видаляються з фронту.

Основні особливості

  • Замовлення FIFO: Елементи обробляються в тому порядку, в якому вони були вставлені (перший у першому).
  • Немає випадкового доступу: На відміну від елементів списку не можна отримати безпосередньо за допомогою індексу.
  • Кілька варіантів: Включає пріоритетні реалізації Deque Arraydeque та LinkedList.
  • Два набори методів: Версії для виведення (додайте елемент видалити) та безпечні версії (пропонують опитування Peek).

Декларація інтерфейсу черги Java

Інтерфейс черги оголошується як:

Публічна черга інтерфейсу розширює колекцію



Ми не можемо створити чергу безпосередньо, оскільки це інтерфейс. Тут ми можемо використовувати такий клас, як LinkedList або PriorityQueue, який реалізує цей інтерфейс.

Чергачерга = новий LinkedList();

для циклів java

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

Приклад: Основна черга за допомогою 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-це бездоганна блокуюча черга, яка замовляє елементи, як пріоритет, і підтримує блокування пошуку. Оскільки це необмежено, що додавання елементів все ще може провалюватися, якщо пам'ять закінчиться. Ось як створити чергу за допомогою цього класу.

js багаторядковий рядок

Приклад:

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. Ітерування черги

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

Приклад:

метод tostring
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 

Методи інтерфейсу черги

Ось повний список методів для чергиІнтерфейс на Java разом із усіма методами, які він успадковує від колекціїі iterable.

Метод

Опис

Boolean Add (E E)Елемент вставки; кидає виняток, якщо він заповнений.
Булева пропозиція (E E)Елемент вставки; Повертає помилково, якщо повне.
E Видалити ()Видаляє голову; кидає виняток, якщо порожній.
E опитування ()Видаляє голову; Повертає null, якщо порожній.
І елемент ()Отримує голову; кидає виняток, якщо порожній.
E peek ()Отримує голову; Повертає null, якщо порожній.
Boolean Addall (колекціяв)Додає всі елементи з іншої колекції.
void clear ()Видаляє всі елементи.
Boolean містить (об'єкт O)Перевіряє, чи існує елемент.
Boolean містить (колекціяв)Перевіряє, чи існують усі елементи.
Boolean equals (об'єкт o)Порівняється з іншою колекцією.
int hashcode ()Повертає хеш -код.
boolean isempty ()Перевіряє, чи порожня колекція.
ІтераторІтератор ()Повертає ітератор для елементів.
Boolean Видалити (об'єкт O)Видаляє конкретний елемент.
Boolean Removeall (колекціяв)Видаляє всі відповідні елементи.
Boolean rathainall (колекціяв)Зберігає лише вказані елементи.
int size ()Повертає кількість елементів.
Об'єкт [] toArray ()Повертає елементи як масив.
T [] toArray (t [] a)Повертає елементи як набраний масив.
за замовчуванням void foreach (споживачДія)Виконує дію для кожного елемента.
за замовчуванням void foreach (споживачДія)Виконує дію для кожного елемента.
Spiterator за замовчуваннямSpliterator ()Повертає Spiterator.
Потік за замовчуваннямпотік ()Повертає послідовний потік.
Потік за замовчуваннямparallelstream ()Повертає паралельний потік.