Java Deque

Java Deque
En kø i databehandling er en første-in_first-out (FIFO) listedatastruktur. Dette betyr å legge til et nytt element, elementet er pålagt på baksiden av listen; Og for å fjerne et element, er elementet avsagt fra fronten av listen. Frontelementet kan også kikkes, noe som betyr å lese det, men ikke fjerne det.

En stabel i databehandling er en listedatastruktur for siste-in_first-out (LIFO). Dette betyr å legge til et nytt element, elementet skyves foran på listen; Og for å fjerne et element, er elementet ut fra fronten av listen. Frontelementet kan også kikkes, noe som betyr å lese det, men ikke fjerne det.

Navnet “Deque” er den korte formen for “Double End Queue”, uttales “Deck”. Deque er en FIFO og en LIFO -liste datastruktur i Java. Vel, også i Java er deque et grensesnitt som klasser kan implementeres. Java har allerede følgende klasser implementert: Arraydeque, ConcurrentLinkedDeque, LinkedBlockingDeque, LinkedList. Arraydeque -klassen er valgt å bli studert i denne artikkelen.

Følgende er Java Arraydeque tilsvarende metoder for kø:

Arraydeque
enqueue Legg til
Dequeue fjerne
Peek Peek

Følgende er Java Arraydeque tilsvarende metoder for stabel:

Stable Arraydeque
trykk trykk
pop pop
Peek Peek

Merk: Peek () -metoden er den samme for begge atferd. Også fjerne () og pop () er veldig like; De blir forklart nedenfor.

Konstruere en arraydeque

Arraydeque -klassen er i Java.util.* pakke, som må importeres. Den har tre konstruktører, hvorav to er forklart her.

public arraydeque ()
Dette skaper en tom deque, som følgende kodesegment viser:

Arraydeque DQ = Ny ArrayDeque();
dq.legg til ('f'); dq.legg til ('g'); dq.legg til ('h'); dq.legg til ('i'); dq.legg til ('j');

Fem elementer ble lagt til. Navnet på deque her er, DQ.

offentlig Arraydeque (samling C)
Denne overbelastede konstruktøren, skaper en deque fra en annen deque. Følgende kodesegment illustrerer dette:

Arraydeque DQ = Ny ArrayDeque();
dq.legg til ('f'); dq.legg til ('g'); dq.legg til ('h'); dq.legg til ('i'); dq.legg til ('j');
Arraydeque dq1 = ny Arraydeque(dq);

DQ1 er opprettet fra DQ.

Metoder for arraydeque -klassen

Offentlig boolsk add (e e)
Dette tilsvarer enqueue. Det legger til et element på slutten av deque. Følgende program illustrerer dette:

Importer Java.util.*;
public class theclass
public static void main (String [] args)
Arraydeque DQ = Ny ArrayDeque();
dq.legg til ('f'); dq.legg til ('g'); dq.legg til ('h'); dq.legg til ('i'); dq.legg til ('j');

offentlig int -størrelse ()
Dette returnerer størrelsen (lengden) på deque. Følgende program illustrerer dette:

Importer Java.util.*;
public class theclass
public static void main (String [] args)
Arraydeque DQ = Ny ArrayDeque();
dq.legg til ('f'); dq.legg til ('g'); dq.legg til ('h'); dq.legg til ('i'); dq.legg til ('j');
int sz = dq.størrelse();
System.ute.Println (SZ);

Utgangen er 5.

offentlig e fjerne ()
Dette tilsvarer dequeue. Det fjerner et element fra fronten av listen. Følgende program illustrerer dette:

Importer Java.util.*;
public class theclass
public static void main (String [] args)
Arraydeque DQ = Ny ArrayDeque();
dq.legg til ('f'); dq.legg til ('g'); dq.legg til ('h'); dq.legg til ('i'); dq.legg til ('j');
char ch1 = dq.fjerne(); char ch2 = dq.fjerne(); char ch3 = dq.fjerne();
char ch4 = dq.fjerne(); char ch5 = dq.fjerne();
System.ute.trykk (CH1); System.ute.print ("); system.ute.trykk (CH2); System.ute.skrive ut(");
System.ute.trykk (CH3); System.ute.print ("); system.ute.trykk (CH4); System.ute.skrive ut(");
System.ute.trykk (CH5); System.ute.skrive ut(");
System.ute.println ();

Utgangen er:

F g h i j

Viser en FIFO -oppførsel.

public e Peek ()
Dette leser elementet foran av deque uten å fjerne det. Følgende program illustrerer dette:

Importer Java.util.*;
public class theclass
public static void main (String [] args)
Arraydeque DQ = Ny ArrayDeque();
dq.legg til ('f'); dq.legg til ('g'); dq.legg til ('h'); dq.legg til ('i'); dq.legg til ('j');
char ch1 = dq.Peek (); char ch2 = dq.Peek (); char ch3 = dq.Peek ();
char ch4 = dq.Peek (); char ch5 = dq.Peek ();
System.ute.trykk (CH1); System.ute.print ("); system.ute.trykk (CH2); System.ute.skrive ut(");
System.ute.trykk (CH3); System.ute.print ("); system.ute.trykk (CH4); System.ute.skrive ut(");
System.ute.trykk (CH5); System.ute.skrive ut(");
System.ute.println ();

Utgangen er:

F f f f f f f

som indikerer at ingenting er fjernet, og det første elementet har nettopp blitt lest fem ganger.

public void push (e e)
Dette tilfører et element foran av deque. Følgende program illustrerer dette:

Importer Java.util.*;
public class theclass
public static void main (String [] args)
Arraydeque DQ = Ny ArrayDeque();
dq.push ('f'); dq.push ('g'); dq.push ('h'); dq.Push ('i'); dq.push ('j');
char ch1 = dq.fjerne(); char ch2 = dq.fjerne(); char ch3 = dq.fjerne();
char ch4 = dq.fjerne(); char ch5 = dq.fjerne();
System.ute.trykk (CH1); System.ute.print ("); system.ute.trykk (CH2); System.ute.skrive ut(");
System.ute.trykk (CH3); System.ute.print ("); system.ute.trykk (CH4); System.ute.skrive ut(");
System.ute.trykk (CH5); System.ute.skrive ut(");
System.ute.println ();

Utgangen er:

J i h g f

Viser en LIFO -oppførsel.

public e pop ()
Dette fjerner og returnerer det første elementet i deque. Følgende program illustrerer dette:

Importer Java.util.*;
public class theclass
public static void main (String [] args)
Arraydeque DQ = Ny ArrayDeque();
dq.push ('f'); dq.push ('g'); dq.push ('h'); dq.Push ('i'); dq.push ('j');
char ch1 = dq.pop (); char ch2 = dq.pop (); char ch3 = dq.pop ();
char ch4 = dq.pop (); char ch5 = dq.pop ();
System.ute.trykk (CH1); System.ute.print ("); system.ute.trykk (CH2); System.ute.skrive ut(");
System.ute.trykk (CH3); System.ute.print ("); system.ute.trykk (CH4); System.ute.skrive ut(");
System.ute.trykk (CH5); System.ute.skrive ut(");
System.ute.println ();

Utgangen er:

J i h g f

Viser en LIFO -oppførsel.

offentlig tomrom foreach (forbrukerhandling)
Denne foreach -metoden kan brukes til å få tilgang til hvert element i deque. Følgende program bruker det til å skrive ut alle elementene i deque:

Importer Java.util.*;
public class theclass
public static void main (String [] args)
Arraydeque DQ = Ny ArrayDeque();
dq.push ('f'); dq.push ('g'); dq.push ('h'); dq.Push ('i'); dq.push ('j');
dq.foreach ((element) -> system.ute.print (element + ""));
System.ute.println ();

Utgangen er:

J i h g f

Elementet er en dummy -variabel som representerer hvert element i deque. Legg merke til hvordan den har blitt brukt. Legg merke til bruken av piloperatøren, -> . Iterasjonen ble gjort i omvendt rekkefølge.

Iterator iterator ()
Dette returnerer en iterator som kan brukes til å fjerne et element i deque. Imidlertid tar denne handlingen lengre tid enn å fjerne et element foran eller baksiden av deque. Følgende uttalelse ville returnere iteratoren for karakterer av en deque.

Iterator iter = dq.iterator ();

hvor iter er iteratorobjektet, og DQ er deque -objektet.

Iteratoren har følgende metoder:

Boolean HasNext (): Returnerer sant hvis iterasjonen har flere elementer.

E Next (): Returnerer neste element i iterasjonen.

Standard tomrom fjerne (): Fjerner fra listen, det siste elementet som er returnert av denne iteratoren (neste).

Merk at den ikke har en metode for å sette inn et element i deque.

Fjerne et element innenfor deque

Følgende program fjerner 'H' midt på deque -listen: F, G, H, I, J:

Importer Java.util.*;
public class theclass
public static void main (String [] args)
Arraydeque DQ = Ny ArrayDeque();
dq.push ('f'); dq.push ('g'); dq.push ('h'); dq.Push ('i'); dq.push ('j');
Iterator iter = dq.iterator ();
iter.neste (); iter.neste (); iter.neste ();
iter.fjerne();
dq.foreach ((element) -> system.ute.print (element + ""));
System.ute.println ();

Utgangen er:

J i g f

Merk at neste () måtte ringes tre ganger.

Konklusjon

I Java er Deque både en FIFO- og LIFO -samling. Deque i Java er faktisk et grensesnitt som en klasse må implementeres fra før deque kan brukes. Heldigvis har Java allerede følgende deque implementerte klasser: ArrayDeque, ConcurrentLinkedDeque, LinkedBlockingDeque, LinkedList. Operasjonen for arraydeque er blitt forklart ovenfor.