Interfață de coadă în Java

Interfața de coadă este o parte din Java.Util pachet și extinde Interfață de colectare . Stochează și procesează datele într -o ordine în care se adaugă elemente în spate și eliminate din față.

Caracteristici cheie

  • Comanda FIFO: Elementele sunt procesate în ordinea în care au fost introduse (primul-în primul-ieșire).
  • Fără acces aleatoriu: Spre deosebire de elementele de listă nu pot fi accesate direct de Index.
  • Mai multe variante: Include implementări PriorityQueue Deque Arraydeque și LinkedList.
  • Două seturi de metode: Versiuni de Excepție Aruncă (Adăugați elementul de eliminare) și versiuni sigure (oferirea de sondaj).

Declarația de interfață Java coadă

Interfața de coadă este declarată ca:

Coada de interfață publică extinde colecția

Nu putem instantai o coadă direct, deoarece este o interfață. Aici putem folosi o clasă precum LinkedList sau PriorityQueue care implementează această interfață.

Coadă coadă = new LinkedList ();

Acum, să parcurgem un exemplu simplu, apoi ne vom scufunda adânc în articol.

Exemplu: coadă de bază folosind 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  );      }   }   

Ieșire
Queue elements: []  

Fiind o interfață, coada are nevoie de o clasă concretă pentru declarație, iar cele mai frecvente clase sunt Prulityqueue şi LinkedList în Java. Rețineți că niciuna dintre aceste implementări nu este sigură a firului. PriorityBlockingQueue este o implementare alternativă dacă este necesară implementarea sigură a firului.

Crearea obiectelor de coadă

Coada este o interfață, astfel încât obiectele nu pot fi create de la coada de tip. Avem întotdeauna nevoie de o clasă care extinde această listă pentru a crea un obiect. Și, de asemenea, după introducerea Generice În Java 1.5 este posibilă restricționarea tipului de obiect care poate fi stocat în coadă. Această coadă de siguranță poate fi definită ca:

Java
   // Obj is the type of the object to be stored in Queue   Queue   <  Obj  >     queue     =     new     PriorityQueue   <  Obj  >     ();   

Metode comune

Interfața de coadă oferă mai multe metode pentru adăugarea de eliminare și inspecție a elementelor în coadă. Iată câteva dintre cele mai utilizate metode:

  • adaugă (element) : Adaugă un element în spatele cozii. Dacă coada este plină, aruncă o excepție.
  • Ofertă (element): Adaugă un element în spatele cozii. Dacă coada este completă, returnează fals.
  • elimina() : Elimină și returnează elementul din partea din față a cozii. Dacă coada este goală, aruncă o excepție.
  • Sondaj (): Îndepărtează și returnează elementul din partea din față a cozii. Dacă coada este goală, se întoarce nul.
  • element(): Returnează elementul din fața cozii fără a -l îndepărta. Dacă coada este goală, aruncă o excepție.
  • arunca o privire() : Returnează elementul din partea din față a cozii fără a -l scoate. Dacă coada este goală, se întoarce nul.

Exemplul 1: Acest exemplu demonstrează operațiuni de coadă.

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  );      }   }   

Ieșire
Queue: [apple banana cherry] Removed element: apple Queue after removal: [banana cherry] Peeked element: banana Queue after peek: [banana cherry date]  

Exemplul 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  );      }   }   

Ieșire
Elements of queue: [0 1 2 3 4] Removed element:0 [1 2 3 4] Head of queue:1 Size of queue:4  

Clase care implementează interfața cozii

1.. PriorityQueue

Clasa PriorityQueue ne permite să procesăm elemente bazate pe prioritatea lor în locul ordinii obișnuite FIFO a unei cozi normale. Este util atunci când elementele trebuie gestionate în ordine prioritară. Iată cum putem crea o coadă folosind această clasă.

Exemplu:

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  ());      }   }   

Ieșire
10 10 15  

2. LinkedList

LinkedList este o structură liniară de date în care elementele sunt stocate ca obiecte separate fiecare conținând date și o legătură către următorul element. Elementele sunt conectate folosind indicatoarele care nu sunt stocate în memorie continuă. Iată cum putem crea o coadă folosind această clasă.

Exemplu:

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  ());      }   }   

Ieșire
10 10 20  

3. PriorityBlockingQueue

PriorityBlockingQueue este o coadă de blocare nelimitată sigură de fir care comandă elemente precum PriorityQueue și acceptă blocarea regăsirii. Întrucât elementele adăugate nelimitate pot eșua în cazul în care memoria se termină. Iată cum să creați o coadă folosind această clasă.

Exemplu:

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  ());      }   }   

Ieșire
10 10 15  

Diferite operații pe interfața de coadă folosind clasa priorityqueue

1. Adăugarea elementelor

Pentru a adăuga un element într -o coadă, putem folosi Metoda adăugați () . Ordinea de inserare nu este păstrată în PriorityQueue. Elementele sunt stocate pe baza ordinii prioritare care este în mod implicit în mod implicit. 

Exemplu:

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  );      }   }   

Ieșire
[For Geeks Geeks]  

2. Eliminarea elementelor

Pentru a elimina un element dintr -o coadă, putem folosi Metoda eliminați (). Dacă există mai multe obiecte, atunci prima apariție a obiectului este eliminată. Metoda sondajului () este de asemenea folosit pentru a îndepărta capul și a -l returna. 

Exemplu:

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  );      }   }   

Ieșire
Initial Queue: [For Geeks Geeks] After Remove: [For Geeks] Poll Method: For Final Queue: [Geeks]  

3. Iterarea cozii

Există mai multe modalități de a itera prin coadă. Cel mai cunoscut mod este transformarea cozii în tablou și traversarea folosind pentru buclă . Coada are, de asemenea, un iterator încorporat care poate fi folosit pentru a itera prin coadă. 

Exemplu:

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  ()     +     ' '  );      }      }   }   

Ieșire
For Geeks Geeks  

Metode de interfață de coadă

Iată lista completă a metodelor pentru coadă Interfață în Java împreună cu toate metodele pe care le moștenește din colecție și iterabil .

Metodă

Descriere

Adăugare booleană (e e) Element inserați; aruncă excepția dacă este complet.
Oferta booleană (e e) Element inserați; Returnează fals dacă este complet.
E elimină () Elimină capul; aruncă excepția dacă este gol.
E POLL () Elimină capul; Returnează nul dacă este gol.
Și element () Recuperează capul; aruncă excepția dacă este gol.
E peek () Recuperează capul; Returnează nul dacă este gol.
Boolean Addall (colecție C) Adaugă toate elementele dintr -o altă colecție.
void clar () Elimină toate elementele.
Boolean conține (obiectul O) Verificări dacă există elementul.
Boolean conține (colecție C) Verificări dacă există toate elementele.
Boolean este egal (obiectul O) Se compară cu o altă colecție.
int hashCode () Returnează codul hash.
boolean isempty () Verifică dacă colecția este goală.
Iterator iterator () Returnează iterator pentru elemente.
boolean elimină (obiectul o) Elimină un element specific.
Removeall Boolean (colecție C) Îndepărtează toate elementele potrivite.
Boolean Retainall (colecție C) Păstrează doar elemente specificate.
int size () Returnează numărul de elemente.
Obiect [] toArray () Returnează elemente ca tablou.
T [] toArray (t [] a) Returnează elemente ca un tablou tastat.
Foreach implicit nul (consumator acţiune) Efectuează acțiune pentru fiecare element.
Foreach implicit nul (consumator acţiune) Efectuează acțiune pentru fiecare element.
Spiterator implicit Spiterator () Returnează un spiterator.
flux implicit Stream () Returnează un flux secvențial.
flux implicit paralelStream () Returnează un flux paralel.