Інтерфейс черги на 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  

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

Ось повний список методів для черги Інтерфейс на 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 () Повертає паралельний потік.