Ce face Deque.pollFirst
pollFirst() scoate și returnează elementul din față, pollLast() pe cel de la final. peekFirst() și peekLast() le returnează fără să le scoată. Pe un Deque gol, toate patru returnează null, fără excepție.
Variantele cu excepții sunt removeFirst/removeLast și getFirst/getLast: aruncă NoSuchElementException pe gol. pollFirst este echivalent cu poll, iar peekFirst cu peek.
Ce returnează
Elementul (scos sau doar privit) ori null.
Exemple
Exemplul 1: Servire din ambele capete
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.List;
public class Main {
public static void main(String[] args) {
Deque<Integer> numere = new ArrayDeque<>(List.of(1, 2, 3, 4, 5));
System.out.println("Primul: " + numere.peekFirst() + ", ultimul: " + numere.peekLast());
while (!numere.isEmpty()) {
System.out.print(numere.pollFirst() + " ");
Integer ultim = numere.pollLast();
if (ultim != null) {
System.out.print(ultim + " ");
}
}
System.out.println();
System.out.println("Pe gol: " + numere.pollFirst() + " " + numere.peekLast());
}
}
Rezultat
Primul: 1, ultimul: 5
1 5 2 4 3
Pe gol: null null
Exemplul 2: Maximul pe ultimele k zile (deque monoton)
Deque-ul ține pozițiile zilelor în ordine descrescătoare a temperaturii. peekFirst dă mereu maximul ferestrei; pollFirst scoate zilele ieșite din fereastră, pollLast pe cele mai reci decât ziua nouă.
import java.util.ArrayDeque;
import java.util.Deque;
public class Main {
public static void main(String[] args) {
int[] temp = {12, 15, 11, 9, 14, 18, 10};
int k = 3;
Deque<Integer> d = new ArrayDeque<>();
for (int i = 0; i < temp.length; i++) {
if (!d.isEmpty() && d.peekFirst() <= i - k) {
d.pollFirst();
}
while (!d.isEmpty() && temp[d.peekLast()] <= temp[i]) {
d.pollLast();
}
d.offerLast(i);
if (i >= k - 1) {
System.out.println("Zilele " + (i - k + 2) + "-" + (i + 1) + ": max " + temp[d.peekFirst()]);
}
}
}
}
Rezultat
Zilele 1-3: max 15
Zilele 2-4: max 15
Zilele 3-5: max 14
Zilele 4-6: max 18
Zilele 5-7: max 18
Greșeli frecvente
- Pui rezultatul direct într-un
int:int x = d.pollFirst();. Pe un deque gol,nulldăNullPointerException. - Folosești
getFirst()crezând că returneazănullpe gol. Aruncă excepție;peekFirst()returneazănull.
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ă.Deque.offerFirst: offerFirst adaugă un element la începutul unui Deque, offerLast la sfârșit. Returnează true dacă a reușit.Deque.push: Folosește un Deque ca stivă: push pune un element deasupra, pop îl scoate pe cel de deasupra, peek îl arată fără să-l scoată.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ă.List.getFirst: Returnează primul sau ultimul element al listei; pe o listă goală aruncă NoSuchElementException.