Ce face Deque.push
O stivă (stack) funcționează ca un teanc de farfurii: ultima pusă este prima luată (LIFO). push(x) pune x deasupra, pop() scoate și returnează elementul de deasupra, iar peek() îl returnează fără să-l scoată.
La un Deque, „deasupra” înseamnă începutul: push este addFirst, pop este removeFirst, peek este peekFirst. De aceea println arată vârful stivei primul.
pop() pe o stivă goală aruncă NoSuchElementException, pe când peek() returnează null. Verifică isEmpty() înainte de pop.
Parametri
| Parametru | Descriere |
|---|---|
e |
Elementul pus pe stivă. |
Ce returnează
push: nimic. pop: elementul scos. peek: vârful sau null.
Exemple
Exemplul 1: Anulare (undo) într-un editor
import java.util.ArrayDeque;
import java.util.Deque;
public class Main {
public static void main(String[] args) {
Deque<String> undo = new ArrayDeque<>();
undo.push("scris „Bună”");
undo.push("scris „ ziua”");
undo.push("îngroșat titlul");
System.out.println("Stiva: " + undo);
System.out.println("Ultima acțiune: " + undo.peek());
System.out.println("Anulez: " + undo.pop());
System.out.println("Anulez: " + undo.pop());
System.out.println("Rămâne: " + undo);
}
}
Rezultat
Stiva: [îngroșat titlul, scris „ ziua”, scris „Bună”]
Ultima acțiune: îngroșat titlul
Anulez: îngroșat titlul
Anulez: scris „ ziua”
Rămâne: [scris „Bună”]
Exemplul 2: Paranteze corect închise
Fiecare paranteză deschisă intră pe stivă; o paranteză închisă trebuie să se potrivească cu vârful.
import java.util.ArrayDeque;
import java.util.Deque;
public class Main {
static boolean echilibrat(String expresie) {
Deque<Character> stiva = new ArrayDeque<>();
for (char c : expresie.toCharArray()) {
switch (c) {
case '(', '[', '{' -> stiva.push(c);
case ')', ']', '}' -> {
if (stiva.isEmpty()) {
return false;
}
char deschis = stiva.pop();
if ("([{".indexOf(deschis) != ")]}".indexOf(c)) {
return false;
}
}
default -> { }
}
}
return stiva.isEmpty();
}
public static void main(String[] args) {
System.out.println(echilibrat("(2 + 3) * [4 - {1 + 1}]"));
System.out.println(echilibrat("(2 + 3]"));
System.out.println(echilibrat("((1)"));
}
}
Rezultat
true
false
false
Greșeli frecvente
- Apelezi
pop()pe o stivă goală. AruncăNoSuchElementException; verificăisEmpty()sau foloseștepoll(). - Te aștepți ca
pushsă pună la sfârșit, caadd. Pune la început.
Comenzi înrudite
Deque: Coadă cu două capete: adaugi și scoți atât la început, cât și la sfârșit. Se folosește și ca stivă, și ca coadă.ArrayDeque: Implementarea recomandată pentru cozi și stive: un array circular care crește automat, rapid la ambele capete.Deque.pollFirst: pollFirst și pollLast scot primul sau ultimul element dintr-un Deque; peekFirst și peekLast doar îl arată. Pe gol dau null.Queue.offer: offer pune un element la coada cozii, poll îl scoate pe primul (sau dă null), peek îl arată pe primul fără să-l scoată.