Compartir a través de


Tipos de las colecciones ArrayList y List

Un objeto System.Collections.ArrayList o System.Collections.Generic.List<T> es una versión más sofisticada de una matriz. La clase ArrayList y la clase genérica List<T> proporcionan algunas de las características que se ofrecen en la mayoría de las clases System.Collections, pero que no están 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 ArrayList.Capacity, la reasignación de memoria y la copia de elementos se realizan 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.

  • Es fácil crear una versión sincronizada de ArrayList mediante el método Synchronized; sin embargo, este tipo de sincronización es relativamente ineficaz. Las clases Array y List<T> dejan que el usuario decida si va a implementar la sincronización. El espacio de nombres System.Collections.Concurrent no proporciona un tipo de lista simultáneo sino que proporciona los tipos ConcurrentStack<T> y ConcurrentQueue<T>.

  • ArrayList y List<T> proporcionan métodos que devuelven a la colección contenedores de solo lectura y de tamaño fijo. Array no dispone de esos métodos.

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, pero ArrayList o List<T> siempre tiene una dimensión exactamente. Sin embargo, puede crear fácilmente una lista de matrices o una lista de listas.

  • Un objeto Array de un tipo específico (distinto de Object) proporciona un rendimiento mayor que un objeto ArrayList. Esto se debe a que los elementos de ArrayList son de tipo Object; por tanto, la aplicación de la conversión boxing y unboxing normalmente se produce al almacenar o recuperar un tipo de valor. Sin embargo, List<T> puede ofrecer un rendimiento similar al de una matriz del mismo tipo siempre que no se necesite ninguna reasignación; es decir, si la capacidad inicial es 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.

Vea también

Referencia

ArrayList

System.Collections

List<T>

System.Collections.Generic

Array

System.Collections.Concurrent

Otros recursos

Tipos de colección utilizados normalmente