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
| 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 extends E>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 | 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. |
| | Vráti prvky ako zadané pole. |
| predvolené void fleach (spotrebiteľ super E>akcia) | Vykonáva akciu pre každý prvok. |
| predvolené void fleach (spotrebiteľ super E>akcia) | Vykonáva akciu pre každý prvok. |
| predvolený spojovací prostriedok | Vráti špilátor. |
| predvolený tok | Vráti sekvenčný prúd. |
| predvolený tok | Vráti paralelný tok. |