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 (); bourne-again shell
Teraz prejdime jednoduchým príkladom, potom sa hlboko ponoríme do článku.
Príklad: Základný front pomocou linkedList
Javaimport 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.
dĺžka reťazca java
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.
Javaimport 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 :
Javaimport 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:
vikas divyakirtiJava
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:
Javaimport 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:
Javaimport 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 hasnextJava
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:
Javaimport 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.
reakčná mapa
Príklad:
Javaimport 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. |