Інтерфейс Queue доступний у пакеті java.util і розширює інтерфейс Collection. Він використовується для збереження елементів, які обробляються за принципом FIFO (First In First Out). Це впорядкований список об’єктів, де вставка елементів відбувається в кінці списку, а видалення елементів — на початку списку.
Будучи інтерфейсом, черга вимагає для оголошення конкретного класу, а найпоширенішими класами є LinkedList і PriorityQueue в Java. Реалізації, виконані цими класами, не є потокобезпечними. Якщо потрібно мати потокобезпечну реалізацію, доступною опцією є PriorityBlockingQueue.
Декларація інтерфейсу черги
public interface Queue extends Collection
Методи інтерфейсу черги Java
метод | опис |
---|---|
логічне додавання (об'єкт) | Він використовується, щоб вставити вказаний елемент у цю чергу та повернути true у разі успіху. |
логічна пропозиція (об'єкт) | Він використовується для вставки зазначеного елемента в цю чергу. |
Об'єкт видалити() | Він використовується для отримання та видалення голови цієї черги. |
Опитування об'єктів() | Він використовується для отримання та видалення голови цієї черги або повертає значення null, якщо ця черга порожня. |
Елемент об'єкта() | Він використовується для отримання, але не видалення голови цієї черги. |
Об'єкт peek() | Він використовується для отримання, але не видалення голови цієї черги, або повертає значення null, якщо ця черга порожня. |
Особливості черги
Нижче наведено деякі важливі функції черги.
- Як обговорювалося раніше, концепція FIFO використовується для вставки та видалення елементів із черги.
- Черга Java забезпечує підтримку всіх методів інтерфейсу колекції, включаючи видалення, вставлення тощо.
- PriorityQueue, ArrayBlockingQueue і LinkedList — це реалізації, які використовуються найчастіше.
- Виняток NullPointerException виникає, якщо в BlockingQueues виконується будь-яка нульова операція.
- Ті черги, які присутні в util відомі як необмежені черги.
- Ті черги, які присутні в корисний відомі як обмежені черги.
- Усі черги, за винятком Deques, полегшує видалення та вставлення в голові та хвості черги; відповідно. Фактично, deques підтримують вставку та видалення елементів з обох кінців.
Клас PriorityQueue
PriorityQueue також є класом, визначеним у рамках колекції, який дає нам спосіб обробки об’єктів на основі пріоритету. Вже описано, що вставка та видалення об’єктів виконується за шаблоном FIFO у черзі Java. Однак іноді елементи черги необхідно обробляти відповідно до пріоритету, і тут у дію вступає PriorityQueue.
Оголошення класу PriorityQueue
Давайте подивимося оголошення для класу java.util.PriorityQueue.
public class PriorityQueue extends AbstractQueue implements Serializable
Приклад Java PriorityQueue
Ім'я файлу: TestCollection12.java
import java.util.*; class TestCollection12{ public static void main(String args[]){ PriorityQueue queue=new PriorityQueue(); queue.add('Amit'); queue.add('Vijay'); queue.add('Karan'); queue.add('Jai'); queue.add('Rahul'); System.out.println('head:'+queue.element()); System.out.println('head:'+queue.peek()); System.out.println('iterating the queue elements:'); Iterator itr=queue.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } queue.remove(); queue.poll(); System.out.println('after removing two elements:'); Iterator itr2=queue.iterator(); while(itr2.hasNext()){ System.out.println(itr2.next()); } } }Перевірте зараз
Вихід:
head:Amit head:Amit iterating the queue elements: Amit Jai Karan Vijay Rahul after removing two elements: Karan Rahul Vijay
Приклад Java PriorityQueue: Книга
Давайте розглянемо приклад PriorityQueue, де ми додаємо книги до черги та друкуємо всі книги. Елементи в PriorityQueue мають бути типу Comparable. Класи String і Wrapper є Comparable за замовчуванням. Щоб додати об’єкти, визначені користувачем, у PriorityQueue, вам потрібно реалізувати інтерфейс Comparable.
Ім'я файлу: LinkedListExample.java
import java.util.*; class Book implements Comparable{ int id; String name,author,publisher; int quantity; public Book(int id, String name, String author, String publisher, int quantity) { this.id = id; this.name = name; this.author = author; this.publisher = publisher; this.quantity = quantity; } public int compareTo(Book b) { if(id>b.id){ return 1; }else if(id <b.id){ return -1; }else{ 0; } public class linkedlistexample { static void main(string[] args) queue priorityqueue(); creating books book b1="new" book(121,'let us c','yashwant kanetkar','bpb',8); b2="new" book(233,'operating system','galvin','wiley',6); b3="new" book(101,'data communications & networking','forouzan','mc graw hill',4); adding to the queue.add(b1); queue.add(b2); queue.add(b3); system.out.println('traversing elements:'); traversing elements for(book b:queue){ system.out.println(b.id+' '+b.name+' '+b.author+' '+b.publisher+' '+b.quantity); queue.remove(); system.out.println('after removing one record:'); < pre> <p> <strong>Output:</strong> </p> <pre>Traversing the queue elements: 101 Data Communications & Networking Forouzan Mc Graw Hill 4 233 Operating System Galvin Wiley 6 121 Let us C Yashwant Kanetkar BPB 8 After removing one book record: 121 Let us C Yashwant Kanetkar BPB 8 233 Operating System Galvin Wiley 6 </pre> <hr></b.id){>