deque java deque implementation
Denna handledning ger detaljerad förklaring av Deque eller 'Dubbelkö' i Java. Du kommer att lära dig mer om Deque-gränssnitt, API-metoder, implementering, etc:
Deque eller 'dubbelkön' i Java är en datastruktur där vi kan infoga eller ta bort element från båda ändarna. Deque är ett gränssnitt i Java som tillhör java.util-paketet och det implementerar java.queue-gränssnittet.
Vi kan implementera deque som en stack (Last In, First Out) -struktur eller som en kö (first-in-first-out). Deque är snabbare än Stack och / eller LinkedList. Deque uttalas som 'kortlek' som i 'kortlek'.
=> Kolla här för att se A-Z av Java-utbildningar här.
Vad du kommer att lära dig:
Omkring Java
En typisk dequesamling kommer att se ut som visas nedan:
hur man spelar .bin-filer på pc
Deque används mest för att implementera stack-, kö- eller listdatastrukturer. Den kan också användas för att implementera prioritetsköer. Funktionerna i ångra eller historik som oftast finns i webbläsarna kan implementeras med hjälp av deques.
Java Deque-gränssnitt
Diagrammet nedan visar hierarkin för den dubbla kön eller deken. Som visas i nedanstående diagram sträcker sig Deque-gränssnittet till kögränssnittet som i sin tur utökar Collection-gränssnittet.
För att använda ett deque-gränssnitt i vårt program måste vi importera paketet som innehåller deque-funktionalitet med hjälp av ett importuttal som visas nedan.
import java.util.deque;
eller
import java.util.*;
Eftersom deque är ett gränssnitt behöver vi konkreta klasser för att implementera deque-gränssnittets funktionalitet.
De två klasserna nedan implementerar deque-gränssnittet.
- ArrayDeque
- Länkad lista
Därför kan vi skapa deque-objekt med dessa två klasser som visas nedan:
Deque numdeque = new ArrayDeque (); Deque strDeque = new LinkedList ();
Så snart de ovanstående deque-objekten har skapats framgångsrikt kan de använda funktionaliteten i deque-gränssnittet.
Nedan följer några viktiga punkter att notera om deque:
- Deque-gränssnitt stöder anpassningsbara matriser som kan växa efter behov.
- Array deques tillåter inte användning av Null-värden.
- Deque stöder inte samtidig åtkomst av mer än en tråd.
- Deque är inte trådsäkert om inte en extern synkronisering tillhandahålls.
ArrayDeque i Java
ArrayDeque tillhör paketet java.util. Det implementerar deque-gränssnittet. Internt använder ArrayDeque-klassen en dynamiskt anpassningsbar array som växer när antalet element ökar.
Nedanstående diagram visar hierarkin för ArrayDeque-klassen:
Som visas i diagrammet ärver ArrayDeque-klassen AbstractCollection-klassen och implementerar Deque-gränssnittet.
vad vr headset fungerar med xbox one
Vi kan skapa ett deque-objekt med hjälp av ArrayDeque-klassen som visas nedan:
Deque deque_obj = new ArrayDeque ();
och exempel
Följande Java-program visar ett enkelt exempel för att bättre förstå deken. Här har vi använt ArrayDeque-klassen för att starta deque-gränssnittet. Vi har precis lagt till några element i deque-objektet och sedan skrivit ut dem med en forEach-slinga.
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 + ' '); } } }
Produktion:
Java API OCH METODER
Eftersom deque-gränssnittet implementerar ett kögränssnitt stöder det alla metoder för kögränssnittet. Dessutom tillhandahåller deque-gränssnittet följande metoder som kan användas för att utföra olika operationer med deque-objektet.
Låt oss sammanfatta dessa metoder i nedanstående tabell.
Metod | Metodprototyp | Beskrivning |
---|---|---|
getFirst | E getFirst () | Hämta det första elementet i deken utan att ta bort det. |
Lägg till | boolesk tillsats (E e) | Lägger till ett visst element e i deken (i svansen) utan att bryta mot kapacitetsbegränsningar och returnerar true om framgång. Kasta IllegalStateException om det inte finns något ledigt utrymme i deken. |
addFirst | ogiltig addFirst (E e) | Lägger till givet element e framför kön utan att bryta mot kapacitetsbegränsningar. |
addLast | ogiltig addLast (E e) | Lägger till element e till det sista av deken utan att bryta mot kapacitetsbegränsningar. |
innehåller | boolean innehåller (Objekt o) | Kontrollerar om deketten innehåller givet element o. Returnerar sant om ja. |
fallandeIterator | Iterator fallandeIterator () | Denna metod returnerar omvänd ordnings iterator för deken. |
element | E-element () | Returnerar det första elementet eller huvudet på deken. Observera att det inte tar bort elementet. |
getLast | E getLast () | Hämtar det sista elementet i deken utan att ta bort det. |
iterator | Iterator iterator () | Returnerar en standard iterator över elementen i deken. |
erbjudande | booleskt erbjudande (E e) | Lägger till givna element e i deken (som en svans) utan att bryta mot kapacitetsbegränsningar. Returnerar sant vid framgång och falskt vid misslyckande. |
offerFirst | boolean offerFirst (E e) | För in det givna elementet e på framsidan av deken utan att bryta mot kapacitetsbegränsningar. |
offerLast | booleskt erbjudandeLast (E e) | Sätt in det givna elementet e i slutet av deken utan att bryta mot kapacitetsbegränsningar. |
titt | E titt () | Returnerar huvudet för deque (första elementet) eller null om en kö är tom. ** tar inte bort huvudet |
kikaFörst | E peekFirst () | Returnerar det första elementet i deken utan att radera det. Returnerar null om deken är tom. |
peekLast | E peekLast () | Hämtar det sista elementet i deken utan att ta bort det. Returnerar null om deken är tom. |
opinionsundersökning | E-undersökning () | Raderar och returnerar huvudet på deken. Returnerar null om deken är tom. |
pollFirst | E pollFirst () | Returnerar och tar bort det första elementet i deken. Returnerar null om deken är tom. |
pollLast | E pollLast () | Returnerar och tar bort det sista elementet i deken. Returnerar null om deken är tom. |
pop- | E pop () | Pop elementet från stacken som representeras med hjälp av deque. |
skjuta på | ogiltigt tryck (E e) | Tryck det givna elementet e till stapeln som representeras med hjälp av deque utan att bryta mot kapacitetsbegränsningarna. Returnerar sant vid framgång eller IllegalStateException om inget utrymme finns tillgängligt på deque. |
ta bort | E ta bort () | Ta bort och sätt tillbaka huvudet på deken. |
ta bort | boolean ta bort (Objekt o) | Ta bort den första förekomsten av det givna elementet o från deken. |
ta bortFörsta | E removeFirst () | Ta bort och sätt tillbaka det första elementet i deken. |
removeFirstOccurrence | boolean removeFirstOccurrence (Objekt o) | Tar bort den första förekomsten av det givna elementet o från deken. |
ta bort förra | E removeLast () | Hämtar och tar bort det sista elementet i deken. |
ta bortLastOccurrence | boolean removeLastOccurrence (Objekt o) | Raderar den sista förekomsten av ett visst element o från deque. |
storlek | int storlek () | Returnerar storleken eller antalet element i deken. |
Och implementering i Java
Låt oss nu implementera ett Java-program för att demonstrera några av de viktigaste deque-metoderna som diskuterats ovan.
I det här programmet använder vi en sträng typ deque och lägger sedan till element i denna deque med olika metoder som add, addFirst, addLast, push, offer, offerFirst, etc. Sedan visar vi deque. Därefter definierar vi standard- och omvänd iteratorer för deken och korsar genom deken för att skriva ut elementen.
Vi använder också de andra metoderna som innehåller, pop, push, peek, poll, ta bort, etc.
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); } }
Produktion:
Vanliga frågor
F # 1) Är Deque trådsäker Java?
Svar: ArrayDeque är inte trådsäkert. Men BlockingDeque-gränssnittet i klassen java.util.concurrent representerar deque. Den här dekalen är trådsäker.
F # 2) Varför är Deque snabbare än stack?
Svar: ArrayDeque-gränssnittet som implementerar deque-gränssnittet är minneseffektivt eftersom det inte behöver hålla koll på föregående eller nästa noder. Det är också en anpassningsbar implementering. Således är deque snabbare än stacken.
F # 3) Är Deque en stack?
Svar: En deque är en dubbelsidig kö. Det tillåter LIFO-beteende och därmed kan det implementeras som en stack även om det inte är en stack.
F # 4) Var används Deque?
Svar: En deque används mest för att implementera funktioner som ångra och historia.
F # 5) Är Deque cirkulär?
Svar: Ja, Deque är cirkulär.
Slutsats
Detta kompletterar vår handledning om Deque-gränssnittet i Java. Deque-gränssnittet implementeras av en deque-datastruktur som är en samling som kan infoga och ta bort element från båda ändarna.
De två klasserna, dvs ArrayDeque och LinkedList, implementerar deque-gränssnittet. Vi kan använda dessa klasser för att implementera funktionaliteten i deque-gränssnittet.
=> Besök här för den exklusiva Java-utbildningsserien.
Rekommenderad läsning
- Dubbelavslutad kö (Deque) i C ++ med exempel
- Java-kö - kömetoder, köimplementering med exempel
- Java Priority Queue Tutorial - Implementation & Exempel
- Prioriterad ködatastruktur i C ++ med illustration
- Kodatastruktur i C ++ med illustration
- C ++ Cirkulär ködatastruktur: Implementering och applikationer
- JAVA-handledning för nybörjare: 100+ praktiska Java-videohandledning
- Prioritetskö i STL