logo

Java Queue Interface

Rozhraní Queue je dostupné v balíčku java.util a rozšiřuje rozhraní Collection. Používá se k zachování prvků, které jsou zpracovány způsobem FIFO (First In First Out). Jedná se o uspořádaný seznam objektů, kde vkládání prvků probíhá na konci seznamu a odstraňování prvků nastává na začátku seznamu.

Jelikož se jedná o rozhraní, fronta vyžaduje pro deklaraci konkrétní třídu a nejběžnějšími třídami jsou LinkedList a PriorityQueue v Javě. Implementace provedené těmito třídami nejsou bezpečné pro vlákna. Pokud je vyžadována implementace zabezpečená vlákny, je dostupná možnost PriorityBlockingQueue.

Deklarace rozhraní fronty

 public interface Queue extends Collection 

Metody rozhraní Java Queue Interface

Metoda Popis
booleovské přidání (objekt) Používá se k vložení zadaného prvku do této fronty a při úspěchu vrátí hodnotu true.
booleovská nabídka (objekt) Slouží k vložení zadaného prvku do této fronty.
Object remove() Používá se k načtení a odstranění hlavy této fronty.
Object poll() Používá se k načtení a odstranění hlavy této fronty nebo vrátí hodnotu null, pokud je tato fronta prázdná.
Object element() Používá se k načtení, ale neodstraní hlavu této fronty.
Pohled na objekt() Používá se k načtení, ale neodstraní hlavičku této fronty, nebo vrátí hodnotu null, pokud je tato fronta prázdná.

Vlastnosti fronty

Následují některé důležité vlastnosti fronty.

  • Jak bylo uvedeno výše, koncept FIFO se používá pro vkládání a mazání prvků z fronty.
  • Java Queue poskytuje podporu pro všechny metody rozhraní kolekce včetně mazání, vkládání atd.
  • PriorityQueue, ArrayBlockingQueue a LinkedList jsou implementace, které se používají nejčastěji.
  • Výjimka NullPointerException se vyvolá, pokud je na BlockingQueues provedena jakákoli operace null.
  • Ty fronty, které jsou přítomny v util balíčky jsou známé jako neomezené fronty.
  • Ty fronty, které jsou přítomny v užitečný balíčky jsou známé jako ohraničené fronty.
  • Všechny fronty kromě Deques usnadňují odstranění a vložení na začátek a konec fronty; respektive. Ve skutečnosti to vyžaduje vkládání a vyjímání nosného prvku na obou koncích.

Třída PriorityQueue

PriorityQueue je také třída, která je definována v rámci kolekce, která nám poskytuje způsob zpracování objektů na základě priority. Již bylo popsáno, že vkládání a mazání objektů probíhá podle vzoru FIFO ve frontě Java. Někdy je však potřeba zpracovat prvky fronty podle priority, to je místo, kde vstupuje do akce PriorityQueue.

Deklarace třídy PriorityQueue

Podívejme se na deklaraci třídy java.util.PriorityQueue.

 public class PriorityQueue extends AbstractQueue implements Serializable 

Příklad Java PriorityQueue

Název souboru: 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()); } } } 
Otestujte to hned

Výstup:

head:Amit head:Amit iterating the queue elements: Amit Jai Karan Vijay Rahul after removing two elements: Karan Rahul Vijay 

Java PriorityQueue Příklad: Kniha

Podívejme se na příklad PriorityQueue, kde přidáváme knihy do fronty a tiskneme všechny knihy. Prvky v PriorityQueue musí být typu Comparable. Třídy String a Wrapper jsou ve výchozím nastavení Porovnatelné. Chcete-li přidat uživatelem definované objekty do PriorityQueue, musíte implementovat rozhraní Comparable.

Název souboru: 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&gt;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 &amp; 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){>