Java Deque

Java Deque
Kolejka w obliczeniach to struktura danych listy First-in_first-out (FIFO). Oznacza to dodanie nowego elementu, element jest zawarty z tyłu listy; i aby usunąć element, element jest odrzucony z przodu listy. Element przedniego można również zglądać, co oznacza, że ​​go odczytał, ale nie usuwając.

Stos w obliczeniach to struktura danych Last-in_first-out (LIFO). Oznacza to dodanie nowego elementu, element jest zepchnięty do przodu listy; i aby usunąć element, element wyskakuje z przodu listy. Element przedniego można również zglądać, co oznacza, że ​​go odczytał, ale nie usuwając.

Nazwa „Deque” jest krótką formą „podwójnej kolejki”, wymawianą „pokład”. Deque to FIFO i struktura danych LIFO w Javie. Cóż, również w Javie deque to interfejs, z którego można zaimplementować klasy. Java ma już następujące klasy: ArrayDeque, ConcurrentLinkedDeque, LinkedBlockingDeque, LinkedList. Klasa ArrayDeque została wybrana do badania w tym artykule.

Poniżej przedstawiono odpowiednie metody Java ArrayDeque:

Kolejka ArrayDeque
enqueue dodać
Dequeue usunąć
zerkać zerkać

Poniżej przedstawiono Java ArrayDeque Odpowiednie metody stosu:

Stos ArrayDeque
naciskać naciskać
Muzyka pop Muzyka pop
zerkać zerkać

Uwaga: Metoda Peek () jest taka sama dla obu zachowań. Również remove () i pop () są bardzo podobne; Są one wyjaśnione poniżej.

Konstruowanie ArrayDeque

Klasa ArrayDeque znajduje się w Javie.Util.* Pakiet, który należy zaimportować. Ma trzy konstruktory, z których dwa są tutaj wyjaśnione.

public ArrayDeque ()
To tworzy puste deque, jak pokazuje następujący segment kodu:

ArrayDeque dq = new ArrayDeque();
DQ.Dodaj („f”); DQ.Dodaj („g”); DQ.Dodaj („h”); DQ.Dodaj („i”); DQ.Dodaj („j”);

Dodano pięć elementów. Nazwa deque to: DQ.

Public ArrayDeque (Collection C)
Ten przeciążony konstruktor tworzy deque z innego deque. Poniższy segment kodu to ilustruje:

ArrayDeque dq = new ArrayDeque();
DQ.Dodaj („f”); DQ.Dodaj („g”); DQ.Dodaj („h”); DQ.Dodaj („i”); DQ.Dodaj („j”);
ArrayDeque dq1 = nowa ArrayDeque(dq);

DQ1 został utworzony z DQ.

Metody klasy ArrayDeque

Public Boolean Add (e e)
To jest odpowiednik enqueue. Dodaje element na końcu deque. Poniższy program ilustruje to:

Importuj Java.Util.*;
Klasa publiczna THEClass
public static void main (string [] args)
ArrayDeque dq = new ArrayDeque();
DQ.Dodaj („f”); DQ.Dodaj („g”); DQ.Dodaj („h”); DQ.Dodaj („i”); DQ.Dodaj („j”);

public int size ()
Zwraca to rozmiar (długość) deque. Poniższy program ilustruje to:

Importuj Java.Util.*;
Klasa publiczna THEClass
public static void main (string [] args)
ArrayDeque dq = new ArrayDeque();
DQ.Dodaj („f”); DQ.Dodaj („g”); DQ.Dodaj („h”); DQ.Dodaj („i”); DQ.Dodaj („j”);
int sz = dq.rozmiar();
System.na zewnątrz.println (SZ);

Wyjście to 5.

public e remove ()
To jest odpowiednik dequeue. Usuwa element z przodu listy. Poniższy program ilustruje to:

Importuj Java.Util.*;
Klasa publiczna THEClass
public static void main (string [] args)
ArrayDeque dq = new ArrayDeque();
DQ.Dodaj („f”); DQ.Dodaj („g”); DQ.Dodaj („h”); DQ.Dodaj („i”); DQ.Dodaj („j”);
char cH1 = dq.usunąć(); char cH2 = dq.usunąć(); char cH3 = dq.usunąć();
char cH4 = dq.usunąć(); char cH5 = dq.usunąć();
System.na zewnątrz.wydruku (CH1); System.na zewnątrz.druk ("); system.na zewnątrz.wydruku (CH2); System.na zewnątrz.wydrukować(");
System.na zewnątrz.druk (CH3); System.na zewnątrz.druk ("); system.na zewnątrz.druk (CH4); System.na zewnątrz.wydrukować(");
System.na zewnątrz.druk (CH5); System.na zewnątrz.wydrukować(");
System.na zewnątrz.println ();

Wyjście to:

F g h i j

pokazując zachowanie FIFO.

public e peek ()
To odczytuje element z przodu deque bez go. Poniższy program ilustruje to:

Importuj Java.Util.*;
Klasa publiczna THEClass
public static void main (string [] args)
ArrayDeque dq = new ArrayDeque();
DQ.Dodaj („f”); DQ.Dodaj („g”); DQ.Dodaj („h”); DQ.Dodaj („i”); DQ.Dodaj („j”);
char cH1 = dq.zerkać(); char cH2 = dq.zerkać(); char cH3 = dq.zerkać();
char cH4 = dq.zerkać(); char cH5 = dq.zerkać();
System.na zewnątrz.wydruku (CH1); System.na zewnątrz.druk ("); system.na zewnątrz.wydruku (CH2); System.na zewnątrz.wydrukować(");
System.na zewnątrz.druk (CH3); System.na zewnątrz.druk ("); system.na zewnątrz.druk (CH4); System.na zewnątrz.wydrukować(");
System.na zewnątrz.druk (CH5); System.na zewnątrz.wydrukować(");
System.na zewnątrz.println ();

Wyjście to:

F f f f f

wskazując, że nic nie zostało usunięte, a pierwszy element został przeczytany pięć razy.

Public Void Push (e e)
To dodaje element z przodu deque. Poniższy program ilustruje to:

Importuj Java.Util.*;
Klasa publiczna THEClass
public static void main (string [] args)
ArrayDeque dq = new ArrayDeque();
DQ.push („f”); DQ.push („g”); DQ.push („h”); DQ.push („i”); DQ.push („j”);
char cH1 = dq.usunąć(); char cH2 = dq.usunąć(); char cH3 = dq.usunąć();
char cH4 = dq.usunąć(); char cH5 = dq.usunąć();
System.na zewnątrz.wydruku (CH1); System.na zewnątrz.druk ("); system.na zewnątrz.wydruku (CH2); System.na zewnątrz.wydrukować(");
System.na zewnątrz.druk (CH3); System.na zewnątrz.druk ("); system.na zewnątrz.druk (CH4); System.na zewnątrz.wydrukować(");
System.na zewnątrz.druk (CH5); System.na zewnątrz.wydrukować(");
System.na zewnątrz.println ();

Wyjście to:

J I H G F

Pokazanie zachowania Lifo.

publiczne e pop ()
To usuwa i zwraca pierwszy element deque. Poniższy program ilustruje to:

Importuj Java.Util.*;
Klasa publiczna THEClass
public static void main (string [] args)
ArrayDeque dq = new ArrayDeque();
DQ.push („f”); DQ.push („g”); DQ.push („h”); DQ.push („i”); DQ.push („j”);
char cH1 = dq.Muzyka pop(); char cH2 = dq.Muzyka pop(); char cH3 = dq.Muzyka pop();
char cH4 = dq.Muzyka pop(); char cH5 = dq.Muzyka pop();
System.na zewnątrz.wydruku (CH1); System.na zewnątrz.druk ("); system.na zewnątrz.wydruku (CH2); System.na zewnątrz.wydrukować(");
System.na zewnątrz.druk (CH3); System.na zewnątrz.druk ("); system.na zewnątrz.druk (CH4); System.na zewnątrz.wydrukować(");
System.na zewnątrz.druk (CH5); System.na zewnątrz.wydrukować(");
System.na zewnątrz.println ();

Wyjście to:

J I H G F

Pokazanie zachowania Lifo.

Public Void Foreach (działanie konsumenckie)
Tę metodę Foreach można zastosować do dostępu do każdego elementu w deque. Poniższy program używa go do drukowania wszystkich elementów w deque:

Importuj Java.Util.*;
Klasa publiczna THEClass
public static void main (string [] args)
ArrayDeque dq = new ArrayDeque();
DQ.push („f”); DQ.push („g”); DQ.push („h”); DQ.push („i”); DQ.push („j”);
DQ.Foreach ((item) -> System.na zewnątrz.print (item + ""));
System.na zewnątrz.println ();

Wyjście to:

J I H G F

Pozycja jest zmienną fikcyjną, która reprezentuje każdy element w deque. Zwróć uwagę na sposób, w jaki był używany. Zwróć uwagę na użycie operatora strzałek, -> . Iteracja została wykonana w odwrotnej kolejności.

Iterator iterator ()
To zwraca iterator, którego można użyć do usunięcia elementu w deque. Jednak działanie to trwa dłużej niż usunięcie elementu z przodu lub z tyłu deque. Poniższe stwierdzenie zwróci iterator dla znaków deque.

Iterator ITER = DQ.iterator ();

gdzie Iter jest obiektem iteratorem, a DQ jest obiektem deque.

Iterator ma następujące metody:

Boolean HasNext (): Zwraca true, jeśli iteracja ma więcej elementów.

E Next (): Zwraca następny element w iteracji.

Domyślny void remove (): usuwa z listy, ostatni element zwrócony przez ten iterator (następny).

Zauważ, że nie ma metody wstawienia elementu do deque.

Usuwanie elementu w Deque

Poniższy program usuwa „H” na środku listy Deque: F, G, H, I, J:

Importuj Java.Util.*;
Klasa publiczna THEClass
public static void main (string [] args)
ArrayDeque dq = new ArrayDeque();
DQ.push („f”); DQ.push („g”); DQ.push („h”); DQ.push („i”); DQ.push („j”);
Iterator ITER = DQ.iterator ();
iter.Następny(); iter.Następny(); iter.Następny();
iter.usunąć();
DQ.Foreach ((item) -> System.na zewnątrz.print (item + ""));
System.na zewnątrz.println ();

Wyjście to:

J i g f

Zwróć uwagę, że następne () trzeba było nazwać trzy razy.

Wniosek

W Javie Deque to zarówno kolekcja FIFO, jak i LIFO. Deque w Javie jest w rzeczywistości interfejsem, z którego klasa musi zostać zaimplementowana, zanim będzie można użyć deque. Na szczęście Java ma już następujące klasy deque: ArrayDeque, ConcurrentlinkedDeque, LinkedBlockingDeque, LinkedList. Operacja ArrayDeque została wyjaśniona powyżej.