deque java deque implementation
Denne tutorial giver detaljeret forklaring af Deque eller 'Dobbeltkø' i Java. Du lærer om Deque-interface, API-metoder, implementering osv .:
Deque eller 'dobbeltkøen' i Java er en datastruktur, hvor vi kan indsætte eller slette elementer fra begge ender. Deque er en grænseflade i Java, der tilhører pakken java.util, og den implementerer java.queue-grænsefladen.
Vi kan implementere deque som en stak (Last In, First Out) struktur eller som en kø (first-in-first-out). Deque er hurtigere end Stack og / eller LinkedList. Deque udtages som “dæk” som i “kortdæk”.
=> Tjek her for at se AZ af Java-træningsvejledninger her.
Hvad du lærer:
Omkring Java
En typisk deque-samling vil se ud som vist nedenfor:
hvordan man finder netværkssikkerhedsnøgle til wifi
Deque bruges mest til at implementere stak, kø eller liste datastrukturer. Det kan også bruges til at implementere prioritetskøer. Funktionerne i fortrydelse eller historie, der hovedsagelig findes i webbrowserne, kan implementeres ved hjælp af deques.
Java Deque-interface
Diagrammet nedenfor viser hierarkiet for køen eller deque med dobbelt ende. Som vist i nedenstående diagram udvides Deque-grænsefladen til kø-grænsefladen, der igen udvider samling-grænsefladen.
For at bruge en deque-grænseflade i vores program skal vi importere pakken, der indeholder deque-funktionalitet ved hjælp af en importerklæring som vist nedenfor.
import java.util.deque;
eller
import java.util.*;
Da deque er en grænseflade, har vi brug for konkrete klasser for at implementere deque-grænseflades funktionalitet.
De to klasser nedenfor implementerer deque-grænsefladen.
- ArrayDeque
- LinkedList
Derfor kan vi oprette deque-objekter ved hjælp af disse to klasser som vist nedenfor:
Deque numdeque = new ArrayDeque (); Deque strDeque = new LinkedList ();
Således når ovenstående deque-objekter er oprettet med succes, kan de bruge funktionaliteten i deque-grænsefladen.
Nedenfor er et par vigtige punkter, der skal bemærkes om deque:
- Deque-interface understøtter arrays, der kan ændres, der kan vokse efter behov.
- Array deques tillader ikke brugen af Null-værdier.
- Deque understøtter ikke samtidig adgang med mere end en tråd.
- Deque er ikke trådsikkert, medmindre der gives en ekstern synkronisering.
ArrayDeque i Java
ArrayDeque tilhører java.util-pakken. Det implementerer deque-grænsefladen. Internt anvender ArrayDeque-klassen et dynamisk resizable array, der vokser, når antallet af elementer øges.
Diagrammet nedenfor viser hierarkiet for ArrayDeque-klassen:
Som vist i diagrammet arver ArrayDeque-klassen AbstractCollection-klassen og implementerer Deque-grænsefladen.
interviewspørgsmål til en forretningsanalytiker
Vi kan oprette et deque-objekt ved hjælp af ArrayDeque-klassen som vist nedenfor:
Deque deque_obj = new ArrayDeque ();
og eksempel
Følgende Java-program demonstrerer et simpelt eksempel for bedre at forstå deque. Her har vi brugt ArrayDeque-klassen til at instantiere deque-grænsefladen. Vi har lige tilføjet nogle elementer til deque-objektet og derefter udskrevet dem ved hjælp af en forEach-løkke.
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 OG METODER
Da deque-grænsefladen implementerer en køgrænseflade, understøtter den alle metoderne i køgrænsefladen. Desuden tilvejebringer deque-grænsefladen følgende metoder, der kan bruges til at udføre forskellige operationer med deque-objektet.
Lad os opsummere disse metoder i nedenstående tabel.
Metode | Metode Prototype | Beskrivelse |
---|---|---|
getFirst | E getFirst () | Hent det første element i deken uden at fjerne det. |
tilføje | boolsk tilføjelse (E e) | Tilføjer givet element e til deken (ved halen) uden at overtræde kapacitetsbegrænsninger og returnerer sandt, hvis succes. Kaster IllegalStateException, hvis der ikke er plads til rådighed i kortet. |
addFirst | ugyldig addFirst (E e) | Tilføjer givet element e foran køen uden at overtræde kapacitetsbegrænsninger. |
addLast | ugyldig addLast (E e) | Tilføjer element e til det sidste af deque uden at krænke kapacitetsbegrænsninger. |
indeholder | boolsk indeholder (Objekt o) | Kontrollerer, om deque indeholder givet element o. Returnerer sandt, hvis ja. |
faldendeIterator | Iterator faldendeIterator () | Denne metode returnerer omvendt rækkefølge iterator for deque. |
element | E-element () | Returnerer det første element eller hoved af deque. Bemærk, at det ikke sletter elementet. |
getLast | E getLast () | Får det sidste element i deken uden at fjerne det. |
iterator | Iterator iterator () | Returnerer en standard iterator over elementerne i deken. |
tilbud | boolsk tilbud (E e) | Tilføjer givet element e til deque (som en hale) uden at krænke kapacitetsbegrænsninger. Returnerer sandt ved succes og falsk ved fiasko. |
tilbudFørst | boolsk tilbudFirst (E e) | Indsæt det givne element e foran forsiden af deken uden at overtræde kapacitetsbegrænsninger. |
offerLast | boolsk tilbudLast (E e) | Indsæt det givne element e i slutningen af deque uden at overtræde kapacitetsbegrænsninger. |
kigge | E kigger () | Returnerer head of deque (første element) eller null, hvis en kø er tom. ** sletter ikke hovedet |
kigFørst | E peekFirst () | Returnerer det første element i deken uden at slette det. Returnerer null, hvis deque er tom. |
kig sidst | E peekLast () | Henter det sidste element i deken uden at fjerne det. Returnerer null, hvis deque er tom. |
afstemning | E-afstemning () | Sletter og returnerer spidsens hoved. Returnerer null, hvis deque er tom. |
afstemningFørst | E pollFirst () | Returnerer og fjerner det første element i deken. Returnerer null, hvis deque er tom. |
pollLast | E pollLast () | Returnerer og fjerner det sidste element i deken. Returnerer null, hvis deque er tom. |
pop | E pop () | Pop elementet fra stakken, der er repræsenteret ved hjælp af deque. |
skubbe | ugyldigt skub (E e) | Skub det givne element e på stakken, der er repræsenteret ved hjælp af deque, uden at overtræde kapacitetsbegrænsningerne. Returnerer sandt ved succes eller IllegalStateException, hvis der ikke er plads til deque. |
fjerne | E fjern () | Fjern og sæt hovedet på deque tilbage. |
fjerne | boolsk fjernelse (Objekt o) | Fjern den første forekomst af det givne element o fra deque. |
Fjern første | E removeFirst () | Fjern og returner det første element i deken. |
removeFirstOccurrence | boolsk removeFirstOccurrence (Objekt o) | Fjerner den første forekomst af det givne element o fra deque. |
Fjern sidste | E removeLast () | Henter og sletter det sidste element i deque. |
removeLastOccurrence | boolean removeLastOccurrence (Objekt o) | Sletter den sidste forekomst af et givet element o fra deque. |
størrelse | int størrelse () | Returnerer størrelsen eller antallet af elementer i deque. |
Og implementering i Java
Lad os nu implementere et Java-program for at demonstrere nogle af de vigtigste deque-metoder, der er diskuteret ovenfor.
I dette program bruger vi en streng type deque og tilføjer derefter elementer til denne deque ved hjælp af forskellige metoder som add, addFirst, addLast, push, offer, offerFirst osv. Derefter viser vi deque. Dernæst definerer vi standard- og omvendte iteratorer for deque og krydser gennem deque for at udskrive elementerne.
Vi bruger også de andre metoder som indeholder, pop, skub, kig, afstem, fjern osv.
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:
Ofte stillede spørgsmål
Q # 1) Er Deque trådsikker Java?
Svar: ArrayDeque er ikke trådsikker. Men BlockingDeque-grænsefladen i klassen java.util.concurrent repræsenterer deque. Denne deque er trådsikker.
Q # 2) Hvorfor er Deque hurtigere end stack?
Svar: ArrayDeque-grænsefladen, der implementerer deque-grænsefladen, er hukommelseseffektiv, da den ikke behøver at holde styr på de forrige eller næste noder. Det er også en størrelse, der kan ændres. Således er deque hurtigere end stakken.
Q # 3) Er Deque en stak?
Svar: En deque er en kø med dobbelt ende. Det tillader LIFO-opførsel, og det kan således implementeres som en stak, selvom den ikke er en stak.
Q # 4) Hvor bruges Deque?
Svar: En deque bruges mest til at implementere funktioner som fortryd og historie.
Q # 5) Er Deque cirkulær?
Svar: Ja, Deque er cirkulær.
Konklusion
Dette fuldender vores tutorial om Deque-grænsefladen i Java. Deque-grænsefladen er implementeret af en deque-datastruktur, som er en samling, der kan indsætte og slette elementer fra begge ender.
De to klasser, dvs. ArrayDeque og LinkedList implementerer deque-grænsefladen. Vi kan bruge disse klasser til at implementere funktionaliteten i deque-grænsefladen.
=> Besøg her for den eksklusive Java-træningsundervisningsserie.
Anbefalet læsning
- Dobbelt afsluttet kø (Deque) i C ++ med eksempler
- Java-kø - kømetoder, køimplementering med eksempler
- Java-prioritetskøvejledning - Implementering og eksempler
- Prioriteret kø datastruktur i C ++ med illustration
- Kø Datastruktur i C ++ med illustration
- C ++ Cirkulær kø Datastruktur: Implementering og applikationer
- JAVA-vejledning til begyndere: 100+ praktiske Java-videovejledninger
- Prioritetskø i STL