deque java deque implementation
Tento výukový program poskytuje podrobné vysvětlení Deque nebo „dvojité fronty“ v Javě. Dozvíte se o rozhraní Deque, metodách API, implementaci atd.:
Deque neboli „dvojitá fronta“ v Javě je datová struktura, do které můžeme vkládat nebo mazat prvky z obou konců. Deque je rozhraní v Javě patřící k balíčku java.util a implementuje rozhraní java.queue.
Můžeme implementovat deque jako strukturu zásobníku (Last In, First Out) nebo jako frontu (first-in-first-out). Deque je rychlejší než Stack a / nebo LinkedList. Deque se vyslovuje jako „balíček“ jako v „balíčku karet“.
=> Podívejte se sem a podívejte se na A-Z výukových kurzů Java zde.
Co se naučíte:
Asi na Javě
Typická kolekce deque bude vypadat takto:
direktivy preprocesoru v jazyce C ++ s příkladem
Deque se většinou používá k implementaci datových struktur zásobníku, fronty nebo seznamu. Lze jej také použít k implementaci prioritních front. Funkce zpět nebo historie, které se většinou vyskytují ve webových prohlížečích, lze implementovat pomocí deques.
Rozhraní Java Deque
Níže uvedený diagram ukazuje hierarchii oboustranné fronty nebo deque. Jak je znázorněno v následujícím diagramu, rozhraní Deque se rozšiřuje na rozhraní fronty, které zase rozšiřuje rozhraní kolekce.
Chcete-li v našem programu použít rozhraní deque, musíme importovat balíček, který obsahuje funkce deque, pomocí příkazu import, jak je znázorněno níže.
import java.util.deque;
nebo
import java.util.*;
Protože deque je rozhraní, potřebujeme konkrétní třídy k implementaci funkcí deque rozhraní.
Tyto dvě třídy níže implementují rozhraní deque.
- ArrayDeque
- Spojový seznam
Proto můžeme vytvářet deque objekty pomocí těchto dvou tříd, jak je znázorněno níže:
Deque numdeque = new ArrayDeque (); Deque strDeque = new LinkedList ();
Jakmile jsou tedy výše uvedené objekty deque úspěšně vytvořeny, mohou využívat funkce rozhraní deque.
Níže uvádíme několik důležitých bodů, které je třeba si o deque všimnout:
- Deque rozhraní podporuje měnitelná pole, která mohou podle potřeby růst.
- Pole polí neumožňují použití hodnot Null.
- Deque nepodporuje souběžný přístup více než jedním vláknem.
- Deque není bezpečné pro vlákna, pokud není k dispozici externí synchronizace.
ArrayDeque v Javě
ArrayDeque patří do balíčku java.util. Implementuje deque rozhraní. Interně třída ArrayDeque využívá dynamicky měnitelné pole, které roste se zvyšujícím se počtem prvků.
Níže uvedený diagram ukazuje hierarchii pro třídu ArrayDeque:
Jak je znázorněno v diagramu, třída ArrayDeque dědí třídu AbstractCollection a implementuje rozhraní Deque.
zdarma online převaděč youtube na mp4
Můžeme vytvořit deque objekt pomocí třídy ArrayDeque, jak je znázorněno níže:
Deque deque_obj = new ArrayDeque ();
a příklad
Následující program Java ukazuje jednoduchý příklad pro lepší pochopení deque. Tady jsme použili třídu ArrayDeque k vytvoření instance rozhraní deque. Právě jsme do objektu deque přidali některé prvky a poté je vytiskli pomocí smyčky forEach.
import java.util.*; public class Main { public static void main(String() args) { //Creat a Deque and add elements Deque cities_deque = new ArrayDeque(); cities_deque.add('Delhi'); cities_deque.add('Mumbai'); cities_deque.add('Bangaluru'); System.out.println('Deque Contents:'); //Traverse the Deque for (String str : cities_deque) { System.out.print(str + ' '); } } }
Výstup:
Java API A METODY
Protože rozhraní deque implementuje rozhraní fronty, podporuje všechny metody rozhraní fronty. Kromě toho rozhraní deque poskytuje následující metody, které lze použít k provedení různých operací s objektem deque.
Shrňme tyto metody v následující tabulce.
Metoda | Metoda Prototyp | Popis |
---|---|---|
getFirst | E getFirst () | Načíst první prvek deque bez jeho odstranění. |
přidat | boolean add (E e) | Přidá daný prvek e do deque (na konci) bez porušení omezení kapacity a v případě úspěchu vrátí true. Vyvolá IllegalStateException, pokud v deque není k dispozici žádné místo. |
addFirst | void addFirst (E e) | Přidá daný prvek e do přední části fronty bez porušení omezení kapacity. |
přidatPoslední | void addLast (E e) | Přidá prvek e na poslední deque bez porušení omezení kapacity. |
obsahuje | boolean obsahuje (Objekt o) | Zkontroluje, zda deque obsahuje daný prvek o. Vrátí true, pokud ano. |
sestupněIterátor | Iterátor sestupněIterátor () | Tato metoda vrací iterátor obráceného pořadí pro deque. |
živel | E prvek () | Vrátí první prvek nebo hlavu deque. Všimněte si, že to neodstraní prvek. |
getLast | E getLast () | Získá poslední prvek deque bez jeho odstranění. |
iterátor | Iterátor iterátor () | Vrátí standardní iterátor nad prvky deque. |
nabídka | booleovská nabídka (E e) | Přidá daný prvek e do deque (jako ocas) bez porušení omezení kapacity. Vrací true při úspěchu a false při neúspěchu. |
nabídka první | boolean offerFirst (E e) | Vložte daný prvek e do přední části deque, aniž byste porušili omezení kapacity. |
poslední nabídka | boolean offerLast (V e) | Vložte daný prvek e na konec deque, aniž byste porušili omezení kapacity. |
nahlédnout | E nahlédnout () | Vrátí hlavičku deque (první prvek) nebo null, pokud je fronta prázdná. ** neodstraní hlavu |
nahlédnout Nejprve | E peekFirst () | Vrátí první prvek v deque bez jeho odstranění. Vrátí hodnotu null, pokud je deque prázdný. |
nahlédnoutPoslední | E peekLast () | Načte poslední prvek v deque bez jeho odstranění. Vrátí hodnotu null, pokud je deque prázdný. |
hlasování | E hlasování () | Odstraní a vrátí hlavu deque. Vrátí hodnotu null, pokud je deque prázdný. |
hlasování | E hlasování První () | Vrátí a odebere první prvek deque. Vrátí hodnotu null, pokud je deque prázdný. |
hlasováníposlední | E hlasováníPoslední () | Vrátí a odebere poslední prvek deque. Vrátí hodnotu null, pokud je deque prázdný. |
pop | E pop () | Pop prvek ze zásobníku, který je reprezentován pomocí deque. |
tam | void push (E e) | Zatlačte daný prvek e na zásobník reprezentovaný pomocí deque bez porušení kapacitních omezení. Vrátí true při úspěchu nebo IllegalStateException, pokud v deque není k dispozici žádný prostor. |
odstranit | E odebrat () | Odstraňte a vraťte hlavu deque. |
odstranit | boolean remove (Objekt o) | Odeberte první výskyt daného prvku o z deque. |
removeFirst | E removeFirst () | Odeberte a vraťte první prvek deque. |
removeFirstOccurrence | boolean removeFirstOccurrence (objekt o) | Odebere první výskyt daného prvku o z deque. |
removePoslední | E removeLast () | Načte a odstraní poslední prvek v deque. |
removeLastOccurrence | boolean removeLastOccurrence (objekt o) | Odstraní poslední výskyt daného prvku o z deque. |
velikost | int velikost () | Vrátí velikost nebo počet prvků v deque. |
A implementace v Javě
Pojďme nyní implementovat program Java, abychom předvedli některé z hlavních metod deque popsaných výše.
V tomto programu používáme deque typu String a poté do tohoto deque přidáváme prvky pomocí různých metod, jako add, addFirst, addLast, push, offer, offerFirst atd. Potom zobrazíme deque. Dále definujeme standardní a reverzní iterátory pro deque a procházíme deque pro tisk prvků.
Používáme také další metody jako contains, pop, push, peek, poll, remove, atd.
import java.util.*; public class Main { public static void main(String() args) { //Declare Deque object Deque deque = new LinkedList(); // add elements to the queue using various methods deque.add('One'); //add () deque.addFirst('Two'); //addFirst () deque.addLast('Three'); //addLast () deque.push('Four'); //push () deque.offer('Five'); //offer () deque.offerFirst('Six'); //offerFirst () deque.offerLast('Seven'); //offerLast () System.out.println('Initial Deque:'); System.out.print(deque + ' '); // Iterate using standard iterator System.out.println('
Deque contents using Standard Iterator:'); Iterator iterator = deque.iterator(); while (iterator.hasNext()) System.out.print(' ' + iterator.next()); // Iterate using Reverse order iterator Iterator reverse = deque.descendingIterator(); System.out.println('
Deque contents using Reverse Iterator:'); while (reverse.hasNext()) System.out.print(' ' + reverse.next()); // Peek () method System.out.println('
Deque Peek:' + deque.peek()); System.out.println('
Deque,After peek:' + deque); // Pop () method System.out.println('
Deque Pop:' + deque.pop()); System.out.println('
Deque,After pop:' + deque); // contains () method System.out.println('
Deque Contains Three: ' + deque.contains('Three')); deque.removeFirst(); //removeFirst () deque.removeLast(); //removeLast () System.out.println('
Deque, after removing ' + 'first and last elements: ' + deque); } }
Výstup:
Často kladené otázky
Otázka č. 1) Je Java bezpečná pro vlákna?
Odpovědět: ArrayDeque není bezpečný pro vlákna. Ale rozhraní BlockingDeque ve třídě java.util.concurrent představuje deque. Tento deque je bezpečný pro vlákna.
Otázka č. 2) Proč je Deque rychlejší než zásobník?
Odpovědět: Rozhraní ArrayDeque, které implementuje rozhraní deque, je paměťově efektivní, protože nemusí sledovat předchozí nebo následující uzly. Jedná se také o změnu velikosti implementace. Deque je tedy rychlejší než zásobník.
Otázka č. 3) Je Deque stack?
Odpovědět: Deque je dvojitá fronta. Umožňuje chování LIFO, a proto jej lze implementovat jako zásobník, i když to není zásobník.
Otázka č. 4) Kde se Deque používá?
Odpovědět: Deque se většinou používá k implementaci funkcí jako zpět a historie.
Otázka č. 5) Je Deque kruhový?
Odpovědět: Ano, Deque je kruhový.
Závěr
Tím je náš tutoriál o rozhraní Deque v Javě dokončen. Deque rozhraní je implementováno strukturou dat deque, což je kolekce, která může vkládat a mazat prvky z obou konců.
Dvě třídy, tj. ArrayDeque a LinkedList implementují rozhraní deque. Tyto třídy můžeme použít k implementaci funkcí rozhraní deque.
=> Navštivte zde exkluzivní sérii výukových programů Java.
Doporučené čtení
- Oboustranná fronta (Deque) v C ++ s příklady
- Fronta Java - metody fronty, implementace fronty s příklady
- Výukový program pro prioritní frontu Java - implementace a příklady
- Struktura dat prioritní fronty v C ++ s ilustrací
- Struktura dat fronty v C ++ s ilustrací
- Struktura dat kruhové fronty C ++: Implementace a aplikace
- Výukový program JAVA pro začátečníky: 100+ praktických výukových programů Java Video
- Prioritní fronta v STL