Una matriz dinámica es una estructura de datos utilizada en la programación de computadoras que contiene múltiples objetos de computación como un solo grupo, y se puede cambiar de tamaño a voluntad para adaptarse a un número variable de objetos. El grupo se mantiene en un solo bloque contiguo de memoria, por lo que el acceso a los elementos es eficiente y rápido. Las matrices dinámicas también se denominan vectores o listas, según el lenguaje informático en el que se utilicen. A pesar de estos nombres, cualquier lista o vector en particular puede no ser una matriz dinámica, ya que las listas y los vectores pueden implementarse de manera diferente a las matrices y entre sí.
C ++ contiene una única clase de matriz dinámica llamada vector, que reside en un grupo de clases llamado biblioteca de plantillas estándar. Se puede acceder a la matriz que respalda esta clase mediante iteradores o índices. Su capacidad para cambiar el tamaño bajo demanda es una gran ventaja, pero puede atraer a los programadores a una falsa sensación de seguridad porque no es tan robusto como parece. La matriz dinámica que respalda un vector no puede garantizar que las solicitudes de acceso sean válidas. Al igual que las matrices estáticas, las matrices dinámicas pueden tener problemas de verificación de límites y corrupción de memoria si un programa intenta acceder a la memoria que no se les ha asignado.
Java contiene tres clases de matriz dinámica distintas: Vector, ArrayList y CopyOnWriteArrayList. A los elementos de la matriz solo se accede mediante índices y, por lo general, intentar acceder a índices fuera de la matriz no provocará problemas de corrupción de memoria. La clase de vector de Java es aproximadamente equivalente a la clase de vector de C ++ y no está sincronizada para permitir el acceso de varios subprocesos. ArrayList y CopyOnWriteArrayList, por el contrario, son seguros para subprocesos. De las tres, CopyOnWriteArrayList es la clase más laboriosa, porque recrea completamente la matriz dinámica cada vez que se escribe un nuevo valor en la matriz.
Los arreglos dinámicos se implementan esencialmente de la misma manera, independientemente del lenguaje de computadora involucrado, pero dependiendo de un lenguaje en particular, puede haber otras capacidades construidas sobre él. Al igual que las matrices estáticas, las matrices dinámicas no restringen el tipo de objeto que se puede almacenar dentro de ellas, siempre que sean todas del mismo tipo de objeto. Un programador nunca necesita acceder directamente a una matriz dinámica; siempre se puede hacer a través de una clase que envuelve la matriz para facilitar su uso. El uso adecuado de estos arreglos puede ayudar a un programador a organizar los datos dentro del código y también a crear un código comprensible que se preste a un fácil mantenimiento.