Tipos de las colecciones ArrayList y List
Actualización: noviembre 2007
Tanto un objeto ArrayList como un objeto List<T> son versiones más sofisticadas de una matriz. La clase ArrayList y la clase genérica List<T> proporcionan algunas de las características que se proporcionan en la mayoría de las clases System.Collections, pero que no se proporcionan en la clase Array. Por ejemplo:
La capacidad de Array es fija, mientras que la capacidad de ArrayList o List<T> se amplía automáticamente si es necesario. Si se cambia el valor de la propiedad Capacity, la memoria se reasigna y los elementos se copian automáticamente.
ArrayList y List<T> proporcionan métodos para agregar, insertar o quitar un intervalo de elementos. En una colección Array, sólo puede obtener o establecer un valor para un elemento cada vez.
Resulta fácil crear una versión sincronizada de ArrayList con el método Synchronized. La clase Array deja que el usuario decida si va a implementar la sincronización.
ArrayList y List<T> proporcionan métodos que devuelven a la colección contenedores de sólo lectura y de tamaño fijo, mientras que Array no lo hace.
Por otra parte, Array ofrece cierta flexibilidad que ArrayList y List<T> no proporcionan. Por ejemplo:
Se puede establecer el límite inferior de Array, pero el límite inferior de ArrayList o List<T> siempre es cero.
Array puede tener varias dimensiones, mientras que ArrayList o List<T> siempre tienen una dimensión exactamente.
Un objeto Array de un tipo específico distinto de Object ofrece mejor rendimiento que ArrayList ya que los elementos de ArrayList son de tipo Object y, por lo tanto, las conversiones boxing y unboxing se producirán normalmente al almacenar o recuperar un tipo de valor. Sin embargo, List<T> puede presentar un rendimiento similar al de una matriz del mismo tipo siempre que no se requiera ninguna reasignación, es decir, siempre que la capacidad inicial sea una aproximación acertada del tamaño máximo de la lista.
En la mayoría de las situaciones en las que se requiere una matriz, se puede utilizar en su lugar un objeto ArrayList o List<T>; son más fáciles de utilizar y, por lo general, presentan un rendimiento similar al de una matriz del mismo tipo.
Array está en el espacio de nombres System; ArrayList, en System.Collections; y List<T>, en System.Collections.Generic.