Un array dinamico è una struttura di dati utilizzata nella programmazione di computer che contiene più oggetti di calcolo come un singolo gruppo e può essere ridimensionata a piacimento per ospitare un numero variabile di oggetti. Il gruppo è contenuto in un unico blocco contiguo di memoria, quindi l’accesso agli elementi è efficiente e veloce. Gli array dinamici sono anche chiamati vettori o elenchi, a seconda del linguaggio del computer in cui vengono utilizzati. Nonostante questi nomi, un particolare elenco o vettore potrebbe non essere un array dinamico, poiché elenchi e vettori possono essere implementati in modo diverso dagli array e l’uno dall’altro.
Il C++ contiene una singola classe array dinamica chiamata vector, che risiede in un gruppo di classi chiamato libreria di modelli standard. È possibile accedere all’array che supporta questa classe tramite iteratori o indici. La sua capacità di ridimensionare su richiesta è un grande vantaggio, ma può attirare i programmatori in un falso senso di sicurezza perché non è così robusto come sembra. L’array dinamico che supporta un vettore non può garantire che le richieste di accesso siano valide. Come gli array statici, gli array dinamici possono avere problemi di controllo dei limiti e di danneggiamento della memoria se un programma tenta di accedere alla memoria che non è stata allocata per loro.
Java contiene tre classi di array dinamici distinti: Vector, ArrayList e CopyOnWriteArrayList. Gli elementi nell’array sono accessibili solo dagli indici e il tentativo di accedere agli indici al di fuori dell’array in genere non causerà problemi di danneggiamento della memoria. La classe Vector Java è approssimativamente equivalente alla classe Vector C++ e non è sincronizzata per consentire l’accesso da più thread. ArrayList e CopyOnWriteArrayList, al contrario, sono entrambi thread-safe. Delle tre, CopyOnWriteArrayList è la classe più laboriosa, perché ricrea completamente l’array dinamico ogni volta che viene scritto un nuovo valore nell’array.
Gli array dinamici sono implementati essenzialmente allo stesso modo indipendentemente dal linguaggio del computer coinvolto, ma a seconda di un particolare linguaggio potrebbero esserci altre funzionalità costruite su di esso. Come gli array statici, gli array dinamici non limitano il tipo di oggetto che può essere memorizzato al loro interno, purché siano tutti dello stesso tipo di oggetto. Un programmatore non ha mai bisogno di accedere direttamente a un array dinamico; può sempre essere fatto attraverso una classe che avvolge l’array per un facile utilizzo. L’uso corretto di questi array può aiutare un programmatore con l’organizzazione dei dati all’interno del codice e anche con la creazione di codice comprensibile che si presti a una facile manutenzione.