Dinamički niz je struktura podataka koja se koristi u računalnom programiranju koja drži više računalnih objekata kao jednu grupu, a veličina joj se može mijenjati po želji kako bi se prilagodio različitom broju objekata. Grupa se drži u jednom susjednom bloku memorije, tako da je pristup elementima učinkovit i brz. Dinamički nizovi se također nazivaju vektori ili liste, ovisno o jeziku računala u kojem se koriste. Unatoč tim nazivima, bilo koji određeni popis ili vektor možda neće biti dinamički niz, budući da se popisi i vektori mogu implementirati drugačije od nizova i jedan od drugog.
C++ sadrži jednu klasu dinamičkog niza zvanu vektor, koja se nalazi u grupi klasa koja se naziva standardna biblioteka predložaka. Nizu koji podržava ovu klasu mogu pristupiti iteratori ili indeksi. Njegova sposobnost promjene veličine na zahtjev velika je prednost, ali može namamiti programere u lažni osjećaj sigurnosti jer nije tako robustan kao što se čini. Dinamički niz koji podupire vektor ne može osigurati valjanost zahtjeva za pristup. Kao i statički nizovi, dinamički nizovi mogu imati probleme s provjerom granica i oštećenjem memorije ako program pokuša pristupiti memoriji koja im nije dodijeljena.
Java sadrži tri različite klase dinamičkog niza: Vector, ArrayList i CopyOnWriteArrayList. Elementima u nizu pristupaju samo indeksi, a pokušaj pristupa indeksima izvan polja obično neće uzrokovati probleme s oštećenjem memorije. Java Vector klasa je otprilike ekvivalentna vektorskoj klasi C++ i nije sinkronizirana kako bi omogućila pristup višestrukim nitima. Nasuprot tome, ArrayList i CopyOnWriteArrayList su sigurni za niti. Od tri, CopyOnWriteArrayList je najintenzivnija klasa, jer potpuno ponovno stvara dinamički niz svaki put kada se nova vrijednost upiše u niz.
Dinamički nizovi se implementiraju na isti način, bez obzira na jezik računala koji je uključen, ali ovisno o određenom jeziku mogu postojati i druge mogućnosti koje su izgrađene na njemu. Kao i statički nizovi, dinamički nizovi ne ograničavaju tip objekta koji se može pohraniti unutar njih, sve dok su svi istog tipa objekta. Programer nikada ne treba izravno pristupiti dinamičkom nizu; uvijek se može učiniti kroz klasu koja obavija niz radi lakšeg korištenja. Pravilna upotreba ovih nizova može pomoći programeru s organizacijom podataka unutar koda, kao i u stvaranju razumljivog koda koji se lako održava.