Ce face ArrayDeque
ArrayDeque ține elementele într-un array folosit circular: începutul și sfârșitul se mută fără să copieze elementele. De aceea adăugarea și scoaterea la ambele capete sunt foarte rapide, mai rapide decât la LinkedList și decât la vechea clasă Stack.
Implementează Deque, deci și Queue: o poți folosi ca stivă (push/pop) sau ca o coadă obișnuită (offer/poll). Nu are acces după index (get(i)) și nu acceptă null. Nu este sigură între fire de execuție.
Parametri
| Parametru | Descriere |
|---|---|
capacitateInitiala |
Câte elemente încap înainte de prima mărire. |
c |
Elementele inițiale, în ordinea colecției. |
Ce returnează
O coadă cu două capete, modificabilă.
Exemple
Exemplul 1: Istoricul „Înapoi” dintr-un browser
import java.util.ArrayDeque;
public class Main {
public static void main(String[] args) {
ArrayDeque<String> inapoi = new ArrayDeque<>();
String curent = "dexblog.ro";
for (String pagina : new String[] {"dexblog.ro/invata", "dexblog.ro/invata/java", "dexblog.ro/invata/java/list"}) {
inapoi.push(curent);
curent = pagina;
}
System.out.println("Acum: " + curent);
curent = inapoi.pop();
System.out.println("Înapoi: " + curent);
curent = inapoi.pop();
System.out.println("Înapoi: " + curent);
System.out.println("Rămase în istoric: " + inapoi);
}
}
Rezultat
Acum: dexblog.ro/invata/java/list
Înapoi: dexblog.ro/invata/java
Înapoi: dexblog.ro/invata
Rămase în istoric: [dexblog.ro]
Exemplul 2: Ultimele 3 temperaturi (fereastră glisantă)
import java.util.ArrayDeque;
public class Main {
public static void main(String[] args) {
ArrayDeque<Integer> ultimele = new ArrayDeque<>();
int[] masuratori = {18, 20, 23, 21, 19, 25};
for (int t : masuratori) {
ultimele.offerLast(t);
if (ultimele.size() > 3) {
ultimele.pollFirst();
}
double medie = ultimele.stream().mapToInt(Integer::intValue).average().orElse(0);
System.out.printf("%s medie %.1f%n", ultimele, medie);
}
}
}
Rezultat
[18] medie 18.0
[18, 20] medie 19.0
[18, 20, 23] medie 20.3
[20, 23, 21] medie 21.3
[23, 21, 19] medie 21.0
[21, 19, 25] medie 21.7
Exemplul 3: null nu este permis
import java.util.ArrayDeque;
public class Main {
public static void main(String[] args) {
ArrayDeque<String> d = new ArrayDeque<>();
try {
d.offer(null);
} catch (NullPointerException e) {
System.out.println("ArrayDeque nu acceptă null");
}
System.out.println("poll pe gol: " + d.poll());
}
}
Rezultat
ArrayDeque nu acceptă null
poll pe gol: null
Greșeli frecvente
- Încerci
deque.get(2).ArrayDequenu are acces după index; dacă ai nevoie, foloseșteArrayList. - Adaugi
null. ApareNullPointerException.
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.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: Interfața pentru cozi: elementele intră la coadă și ies din față, în ordinea sosirii (FIFO), ca la ghișeu.LinkedList: Listă dublu înlănțuită: adăugare și ștergere rapide la ambele capete; implementează și List, și Deque.ArrayList: Lista implementată cu un array intern care crește automat; acces foarte rapid după index. Cea mai folosită listă din Java.