O matrice dinamică este o structură de date utilizată în programarea computerelor care deține mai multe obiecte de calcul ca un singur grup și poate fi redimensionată după bunul plac pentru a găzdui un număr diferit de obiecte. Grupul este ținut într-un singur bloc de memorie contiguu, astfel încât accesul la elemente este eficient și rapid. Matricele dinamice sunt numite și vectori sau liste, în funcție de limbajul computerului în care sunt utilizate. În ciuda acestor nume, orice listă sau vector anume poate să nu fie o matrice dinamică, deoarece listele și vectorii pot fi implementate diferit de matrice și unele de altele.
C++ conține o singură clasă matrice dinamică numită vector, care rezidă într-un grup de clase numit bibliotecă de șabloane standard. Matricea care susține această clasă poate fi accesată de către iteratoare sau de către indecși. Capacitatea sa de a redimensiona la cerere este un mare avantaj, dar îi poate atrage pe programatori într-un fals sentiment de securitate, deoarece nu este atât de robust pe cât pare să fie. Matricea dinamică care susține un vector nu poate asigura că cererile de acces sunt valide. Ca și matricele statice, matricele dinamice pot avea probleme de verificare a limitelor și de corupție a memoriei dacă un program încearcă să acceseze memorie care nu a fost alocată pentru ele.
Java conține trei clase de matrice dinamice distincte: Vector, ArrayList și CopyOnWriteArrayList. Elementele din matrice sunt accesate numai de indici, iar încercarea de a accesa indecșii din afara matricei, de obicei, nu va cauza probleme de corupție a memoriei. Clasa Java Vector este aproximativ echivalentă cu clasa vectorială C++ și nu este sincronizată pentru a permite accesul mai multor fire. ArrayList și CopyOnWriteArrayList, prin contrast, sunt ambele sigure pentru fire. Dintre cele trei, CopyOnWriteArrayList este clasa cea mai laborioasă, deoarece recreează complet matricea dinamică de fiecare dată când o nouă valoare este scrisă în matrice.
Matricele dinamice sunt implementate în esență în același mod, indiferent de limbajul computerului implicat, dar, în funcție de o anumită limbă, pot exista și alte capabilități construite pe deasupra. Ca și matricele statice, matricele dinamice nu restricționează tipul de obiect care poate fi stocat în interiorul lor, atâta timp cât sunt toate de același tip de obiect. Un programator nu trebuie să acceseze direct o matrice dinamică; se poate realiza oricând printr-o clasă care învelește matricea pentru o utilizare ușoară. Utilizarea corectă a acestor matrice poate ajuta un programator cu organizarea datelor în cod și, de asemenea, cu crearea unui cod ușor de înțeles, care se pretează la o întreținere ușoară.