Интерфейсът Queue е наличен в пакета java.util и разширява интерфейса Collection. Използва се за запазване на елементите, които се обработват по начина Първи влязъл, първи излязъл (FIFO). Това е подреден списък от обекти, където вмъкването на елементи се извършва в края на списъка, а премахването на елементи се извършва в началото на списъка.
Тъй като е интерфейс, опашката изисква за декларацията конкретен клас, а най-често срещаните класове са LinkedList и PriorityQueue в Java. Реализациите, направени от тези класове, не са безопасни за нишки. Ако се изисква да има безопасна реализация на нишката, PriorityBlockingQueue е налична опция.
Декларация на интерфейса на опашка
public interface Queue extends Collection
Методи на Java Queue Interface
Метод | Описание |
---|---|
булево добавяне (обект) | Използва се за вмъкване на посочения елемент в тази опашка и връщане на true при успех. |
булева оферта (обект) | Използва се за вмъкване на посочения елемент в тази опашка. |
Премахване на обект() | Използва се за извличане и премахване на главата на тази опашка. |
Обектна анкета() | Използва се за извличане и премахване на главата на тази опашка или връща нула, ако тази опашка е празна. |
Обектен елемент() | Използва се за извличане, но не премахване на главата на тази опашка. |
Object peek() | Използва се за извличане, но не премахване на главата на тази опашка или връща нула, ако тази опашка е празна. |
Характеристики на опашка
По-долу са някои важни характеристики на опашка.
- Както беше обсъдено по-рано, концепцията FIFO се използва за вмъкване и изтриване на елементи от опашка.
- Java Queue осигурява поддръжка за всички методи на интерфейса за събиране, включително изтриване, вмъкване и т.н.
- 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){>