Rozhranie frontov v Java

Rozhranie frontu je súčasťou java.util balík a rozširuje Kolekcia . Ukladá a spracováva údaje v poradí, kde sa prvky pridávajú vzadu a odstránia sa spredu.

Kľúčové funkcie

  • FIFO OBJEDNÁVKA: Prvky sa spracúvajú v poradí, v akom boli vložené (prvé prvé).
  • Žiadny náhodný prístup: Na rozdiel od prvkov zoznamu nie je možné pristupovať priamo indexom.
  • Viaceré varianty: Zahŕňa priorityqueue deque ArrayDeque a Implementácia LinkedList.
  • Dve sady metód: Verzie vyhodenia (Pridať Element Element) a bezpečné verzie (ponúkajte anketu Peek).

Vyhlásenie rozhrania Java Front

Rozhranie frontu je deklarované ako:

Front verejného rozhrania rozširuje zbierku

Nemôžeme inštantovať front priamo, pretože ide o rozhranie. Tu môžeme použiť triedu, ako je LinkedList alebo Priorityqueue, ktorý implementuje toto rozhranie.

Front front = nový LinkedList ();

Teraz prejdime jednoduchým príkladom, potom sa hlboko ponoríme do článku.

Príklad: Základný front pomocou 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  );      }   }   

Výstup
Queue elements: []  

Byť rozhraním, front potrebuje na vyhlásenie betónovú triedu a najbežnejšími triedami sú Prulita a Prepojený zoznam v Java. Všimnite si, že ani jedna z týchto implementácií nie je bezpečná. PriorityBlockingqueue je jednou z alternatívnej implementácie, ak je potrebná implementácia bezpečia na vlákno.

Vytváranie objektov frontu

Front je rozhranie, takže objekty nie je možné vytvoriť z frontu typu. Vždy potrebujeme triedu, ktorá rozširuje tento zoznam, aby sme vytvorili objekt. A tiež po zavedení Generické výrobky V Java 1.5 je možné obmedziť typ objektu, ktorý je možné uložiť do frontu. Tento front-bezpečnostný front možno definovať ako:

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

Bežné metódy

Rozhranie frontu poskytuje niekoľko metód na pridanie odstránenia a kontroly prvkov vo fronte. Tu sú niektoré z najbežnejšie používaných metód:

  • Pridať (prvok) : Pridá prvok do zadnej časti frontu. Ak je front plný, vyvolá výnimku.
  • ponuka (prvok): Pridá prvok do zadnej časti frontu. Ak je front plný, vráti sa nepravdivé.
  • odstrániť () : Odstráni a vráti prvok v prednej časti frontu. Ak je front prázdny, vyvolá výnimku.
  • anketa (): Odstráni a vráti prvok v prednej časti frontu. Ak je front prázdny, vráti sa null.
  • element (): Vráti prvok v prednej časti frontu bez toho, aby ste ho odstránili. Ak je front prázdny, vyvolá výnimku.
  • peek () : Vráti prvok v prednej časti frontu bez toho, aby ste ho odstránili. Ak je front prázdny, vráti sa null.

Príklad 1: Tento príklad demonštruje operácie frontových frontov.

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

Výstup
Queue: [apple banana cherry] Removed element: apple Queue after removal: [banana cherry] Peeked element: banana Queue after peek: [banana cherry date]  

Príklad 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  );      }   }   

Výstup
Elements of queue: [0 1 2 3 4] Removed element:0 [1 2 3 4] Head of queue:1 Size of queue:4  

Triedy, ktoré implementujú rozhranie frontu

1. Priorityqueue

Trieda priorityqueue nám umožňuje spracovať prvky na základe ich priority namiesto obvyklého poradia FIFO normálneho frontu. Je to užitočné, keď sa musia riešiť prvky v prioritnom poradí. Tu je návod, ako môžeme vytvoriť front pomocou tejto triedy.

Príklad:

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

Výstup
10 10 15  

2. LinkedList

LinkedList je lineárna dátová štruktúra, kde sa prvky ukladajú ako samostatné objekty, z ktorých každý obsahuje údaje a odkaz na ďalší prvok. Prvky sú pripojené pomocou ukazovateľov, ktoré nie sú uložené v kontinuálnej pamäti. Tu je návod, ako môžeme vytvoriť front pomocou tejto triedy.

Príklad:

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

Výstup
10 10 20  

3. PriorityBlockingqueue

PriorityBlockingQueue je bezpečný blok blokujúci front, ktorý objednáva prvky, ako je priorityqueue a podporuje blokovanie získavania. Pretože je neobmedzené, pridávanie prvkov môže stále zlyhať, ak sa vyčerpá pamäť. Tu je návod, ako vytvoriť frontu pomocou tejto triedy.

Príklad:

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

Výstup
10 10 15  

Rôzne operácie na rozhraní frontu pomocou triedy priorityqueue

1. Pridanie prvkov

Na pridanie prvku do frontu môžeme použiť metóda pridať () . Príkaz na vloženie sa v prioritnomqueue nezachová. Prvky sa ukladajú na základe prioritného poradia, ktoré predvolene stúpajú. 

Príklad:

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

Výstup
[For Geeks Geeks]  

2. Odstraňovanie prvkov

Na odstránenie prvku z frontu môžeme použiť odstrániť () metóda. Ak existuje viac objektov, potom sa odstráni prvý výskyt objektu. Ten Metóda anl () sa tiež používa na odstránenie hlavy a jej vrátenie. 

Príklad:

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

Výstup
Initial Queue: [For Geeks Geeks] After Remove: [For Geeks] Poll Method: For Final Queue: [Geeks]  

3. Iterácia frontu

Existuje niekoľko spôsobov, ako iterovať cez front. Najslávnejším spôsobom je premena frontu na pole a prechádzanie pomocou na slučku . Front má tiež zabudovaný iterátor, ktorý sa dá použiť na iteráciu frontom. 

Príklad:

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

Výstup
For Geeks Geeks  

Metódy rozhrania frontu

Tu je celý zoznam metód pre front Rozhranie v Jave spolu so všetkými metódami zdedí zo zbierky A itrable .

Metóda

Opis

Boolean Add (e e) Vložky prvok; vyvolá výnimku, ak je plná.
Booleovská ponuka (e e) Vložky prvok; Vráti sa nepravdivé, ak sú plné.
E odstraňte () Odstraňuje hlavu; vyvolá výnimku, ak je prázdna.
E anketa () Odstraňuje hlavu; Vráti null, ak je prázdny.
A element () Získava hlavu; vyvolá výnimku, ak je prázdna.
E peek () Získava hlavu; Vráti null, ak je prázdny.
Boolean Addall (zbierka c) Pridáva všetky prvky z inej zbierky.
void clear () Odstraňuje všetky prvky.
Boolean obsahuje (objekt o) Kontroluje, či existuje prvok.
boolean obsahuje (zbierka c) Kontroluje, či existujú všetky prvky.
Boolean Equals (Objekt O) V porovnaní s inou zbierkou.
int hashcode () Vráti kód hash.
boolean isempty () Kontroluje, či je zbierka prázdna.
Iterátor iterátor () Vracia iterátora pre prvky.
boolean odstráňte (objekt o) Odstráni konkrétny prvok.
Boolean RemonteAll (zbierka c) Odstraňuje všetky zodpovedajúce prvky.
Boolean Držbal (zbierka c) Udržiava iba špecifikované prvky.
int size () Vráti počet prvkov.
Object [] toarray () Vráti prvky ako pole.
T [] toarray (t [] a) Vráti prvky ako zadané pole.
predvolené void fleach (spotrebiteľ akcia) Vykonáva akciu pre každý prvok.
predvolené void fleach (spotrebiteľ akcia) Vykonáva akciu pre každý prvok.
predvolený spojovací prostriedok splirátor () Vráti špilátor.
predvolený tok stream () Vráti sekvenčný prúd.
predvolený tok paralelstream () Vráti paralelný tok.