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.