deque java deque implementation
Deze zelfstudie biedt een gedetailleerde uitleg van Deque of 'Double-ended Queue' in Java. U leert over Deque-interface, API-methoden, implementatie, enz:
De Deque of 'dubbele wachtrij' in Java is een datastructuur waarin we elementen van beide uiteinden kunnen invoegen of verwijderen. De deque is een interface in Java die behoort tot het pakket java.util en het implementeert de interface java.queue.
We kunnen deque implementeren als een stapel (Last In, First Out) structuur of als een wachtrij (first-in-first-out). Deque is sneller dan Stack en / of LinkedList. Deque wordt uitgesproken als 'kaartspel' zoals in het 'pak kaarten'.
Kijk hier om AZ van Java-trainingshandleidingen hier te zien.
Wat je leert:
Over Java
Een typische deque-collectie ziet er uit zoals hieronder weergegeven:
waarom blijft mijn standaardgateway offline gaan
Deque wordt meestal gebruikt om stapel-, wachtrij- of lijstgegevensstructuren te implementeren. Het kan ook worden gebruikt om prioriteitswachtrijen te implementeren. De kenmerken van ongedaan maken of geschiedenis die meestal aanwezig zijn in de webbrowsers, kunnen worden geïmplementeerd met deques.
Java Deque-interface
Het onderstaande diagram toont de hiërarchie voor de dubbele wachtrij of deque. Zoals weergegeven in het onderstaande diagram, breidt de Deque-interface zich uit naar de Queue-interface die op zijn beurt de Collection-interface uitbreidt.
Om een deque-interface in ons programma te gebruiken, moeten we het pakket met deque-functionaliteit importeren met behulp van een importinstructie zoals hieronder weergegeven.
of
Omdat de deque een interface is, hebben we concrete klassen nodig om de functionaliteit van de deque-interface te implementeren.
De twee klassen hieronder implementeren de deque-interface.
- ArrayDeque
- LinkedList
Daarom kunnen we deque-objecten maken met behulp van deze twee klassen, zoals hieronder wordt weergegeven:
Dus zodra de bovenstaande deque-objecten met succes zijn gemaakt, kunnen ze de functionaliteit van de deque-interface gebruiken.
Hieronder staan een paar belangrijke punten die over deque opgemerkt moeten worden:
- Deque-interface ondersteunt aanpasbare arrays die naar behoefte kunnen groeien.
- Array-deques staan het gebruik van Null-waarden niet toe.
- Deque ondersteunt geen gelijktijdige toegang door meer dan één thread.
- Deque is niet thread-safe tenzij een externe synchronisatie is voorzien.
ArrayDeque in Java
ArrayDeque behoort tot het pakket java.util. Het implementeert de deque-interface. Intern maakt de klasse ArrayDeque gebruik van een dynamisch aanpasbare array die groeit naarmate het aantal elementen toeneemt.
Het onderstaande diagram toont de hiërarchie voor de klasse ArrayDeque:
Zoals weergegeven in het diagram, erft de klasse ArrayDeque de klasse AbstractCollection en implementeert de Deque-interface.
beste big data-bedrijven om voor te werken
We kunnen een deque-object maken met behulp van de klasse ArrayDeque, zoals hieronder wordt weergegeven:
en Voorbeeld
Het volgende Java-programma laat een eenvoudig voorbeeld zien om de deque beter te begrijpen. Hier hebben we de klasse ArrayDeque gebruikt om de deque-interface te instantiëren. We hebben zojuist enkele elementen aan het deque-object toegevoegd en deze vervolgens afgedrukt met een forEach-lus.
Uitgang:
De Java API EN METHODEN
Omdat de deque-interface een wachtrij-interface implementeert, ondersteunt het alle methoden van de wachtrij-interface. Bovendien biedt de deque-interface de volgende methoden die kunnen worden gebruikt om verschillende bewerkingen met het deque-object uit te voeren.
Laten we deze methoden in de onderstaande tabel samenvatten.
Methode | Methode Prototype | Omschrijving |
---|---|---|
getFirst | E getFirst () | Haal het eerste element van de deque op zonder het te verwijderen. |
toevoegen | boolean add (E e) | Voegt gegeven element e toe aan de deque (aan de staart) zonder capaciteitsbeperkingen te schenden en geeft true terug als het lukt. Gooit IllegalStateException als er geen ruimte beschikbaar is in de deque. |
addFirst | leegte addFirst (E e) | Voegt gegeven element e toe aan de voorkant van de wachtrij zonder capaciteitsbeperkingen te schenden. |
addLast | leegte addLast (E e) | Voegt element e toe aan de laatste van de deque zonder capaciteitsbeperkingen te schenden. |
bevat | boolean bevat (Object o) | Controleert of de deque het gegeven element o bevat. Retourneert true indien ja. |
aflopendIterator | Iterator aflopend | Deze methode retourneert iterator in omgekeerde volgorde voor de deque. |
element | E-element () | Retourneert het eerste element of de kop van de deque. Merk op dat het element niet wordt verwijderd. |
word laatste | E getLast () | Haalt het laatste element van de deque op zonder het te verwijderen. |
iterator | Iterator iterator () | Retourneert een standaard iterator over de elementen van de deque. |
aanbod | booleaanse aanbieding (E e) | Voegt gegeven element e toe aan de deque (als een staart) zonder capaciteitsbeperkingen te schenden. Geeft true terug bij succes en false bij mislukking. |
aanbieding First | boolean offerFirst (E e) | Plaats het gegeven element e aan de voorkant van het deque zonder capaciteitsbeperkingen te overtreden. |
aanbieding Laatste | boolean offerLast (E e) | Plaats het gegeven element e aan het einde van de deque zonder capaciteitsbeperkingen te overtreden. |
kijkje | E peek () | Geeft head van de deque (eerste element) of null terug als een wachtrij leeg is. ** verwijdert de kop niet |
eerste | E peekFirst () | Retourneert het eerste element in de deque zonder het te verwijderen. Retourneert null als de deque leeg is. |
laatste | E peekLast () | Haalt het laatste element in de deque op zonder het te verwijderen. Retourneert null als de deque leeg is. |
poll | E poll () | Verwijdert en geeft de kop van de deque terug. Retourneert null als de deque leeg is. |
pollFirst | E pollFirst () | Retourneert en verwijdert het eerste element van de deque. Retourneert null als de deque leeg is. |
pollLast | E pollLast () | Retourneert en verwijdert het laatste element van de deque. Retourneert null als de deque leeg is. |
knal | E pop () | Haal het element uit de stapel dat wordt weergegeven met deque. |
Duwen | leegte push (E e) | Duw gegeven element e op de weergegeven stapel met deque zonder de capaciteitsbeperkingen te overtreden. Geeft true terug bij succes of IllegalStateException als er geen ruimte beschikbaar is op deque. |
verwijderen | E verwijderen () | Verwijder de kop van de deque en plaats deze terug. |
verwijderen | boolean remove (Object o) | Verwijder het eerste exemplaar van het gegeven element o uit de deque. |
removeFirst | E removeFirst () | Verwijder het eerste element van de deque en plaats het terug. |
removeFirstOccurrence | boolean removeFirstOccurrence (Object o) | Verwijdert het eerste exemplaar van het gegeven element o uit de deque. |
removeLast | E removeLast () | Haalt het laatste element in de deque op en verwijdert het. |
removeLastOccurrence | boolean removeLastOccurrence (Object o) | Verwijdert de laatste keer dat een bepaald element o uit de deque voorkomt. |
grootte | int maat () | Retourneert de grootte of het aantal elementen in de deque. |
En implementatie in Java
Laten we nu een Java-programma implementeren om enkele van de belangrijkste deque-methoden te demonstreren die hierboven zijn besproken.
In dit programma gebruiken we een String-type deque en voegen we vervolgens elementen toe aan deze deque met behulp van verschillende methoden zoals add, addFirst, addLast, push, offer, offerFirst, etc. Vervolgens tonen we de deque. Vervolgens definiëren we de standaard en omgekeerde iteratoren voor de deque en doorlopen we de deque om de elementen af te drukken.
We gebruiken ook de andere methoden zoals contain, pop, push, peek, poll, remove, etc.
Uitgang:
Veel Gestelde Vragen
V # 1) Is Deque thread-safe Java?
Antwoord: ArrayDeque is niet draadveilig. Maar de BlockingDeque-interface in de klasse java.util.concurrent vertegenwoordigt de deque. Dit deque is draadveilig.
Q # 2) Waarom is Deque sneller dan stapel?
Antwoord: De ArrayDeque-interface die de deque-interface implementeert, is geheugenefficiënt omdat het de vorige of volgende knooppunten niet hoeft bij te houden. Het is ook een implementatie die kan worden aangepast. Dus deque is sneller dan de stapel.
Q # 3) Is Deque een stapel?
Antwoord: Een deque is een dubbele wachtrij. Het staat LIFO-gedrag toe en kan dus worden geïmplementeerd als een stapel, hoewel het geen stapel is.
Q # 4) Waar wordt Deque gebruikt?
Antwoord: Een deque wordt meestal gebruikt om functies zoals ongedaan maken en geschiedenis te implementeren.
V # 5) Is Deque circulair?
Antwoord: Ja, Deque is circulair.
Gevolgtrekking
Hiermee is onze tutorial over de Deque-interface in Java voltooid. De deque-interface wordt geïmplementeerd door een deque-gegevensstructuur, een verzameling die elementen van beide uiteinden kan invoegen en verwijderen.
De twee klassen, d.w.z. ArrayDeque en LinkedList, implementeren de deque-interface. We kunnen deze klassen gebruiken om de functionaliteit van de deque-interface te implementeren.
Bezoek hier voor de exclusieve Java Training Tutorial Series.
Aanbevolen literatuur
- Double Ended Queue (Deque) in C ++ met voorbeelden
- Java-wachtrij - wachtrijmethoden, wachtrij-implementatie met voorbeelden
- Zelfstudie voor Java Priority Queue - Implementatie en voorbeelden
- Prioriteitswachtrijgegevensstructuur in C ++ met illustratie
- Wachtrijgegevensstructuur in C ++ met illustratie
- C ++ Circular Queue-gegevensstructuur: implementatie en toepassingen
- JAVA-zelfstudie voor beginners: 100+ praktische Java-videotutorials
- Prioriteitswachtrij in STL