Coleções do Tipo ArrayList e List
A System.Collections.ArrayList ou System.Collections.Generic.List<T> o objeto é uma versão sofisticada de matriz. O ArrayList classe e o List<T> classe genérica oferecem alguns recursos que são oferecidos na maioria dos System.Collections classes, mas que não estão na Array classe. Por exemplo:
A capacidade de um Array é fixa, enquanto a capacidade de um ArrayList ou um List<T> será automaticamente expandida conforme necessário. Se o valor de ArrayList.Capacity propriedade for alterada, a realocação de memória e a cópia de elementos são feitas automaticamente.
ArrayList e List<T> fornecem métodos que adicionam, inserem ou removem um intervalo de elementos. Em Array, você pode obter ou definir o valor de apenas um elemento de cada vez.
Uma versão sincronizada dele ArrayList é fácil criar usando o Synchronized método; No entanto, esse tipo de sincronização é relativamente ineficiente. O Array e List<T> classes deixa para o usuário para implementar a sincronização. O System.Collections.Concurrent namespace não fornece um tipo de lista simultâneas, mas fornece uma ConcurrentQueue<T> e ConcurrentStack<T> tipo.
ArrayListe List<T> fornecem métodos que retornam os invólucros de somente leitura e de tamanho fixo para a coleção. Arraynão.
Por outro lado, o Array oferece alguma flexibilidade que ArrayList e List<T> não oferece. Por exemplo:
Você pode definir o limite inferior de um Array, mas a limite inferior de um ArrayList ou um List<T> é sempre zero.
Um Array pode ter várias dimensões, mas um ArrayList ou List<T> sempre tem exatamente uma dimensão. No entanto, você pode criar facilmente uma lista de matrizes ou de uma lista de listas.
Um Array de um tipo específico (diferente de Object) fornece um desempenho melhor do que uma ArrayList. Isso ocorre porque os elementos de ArrayList são do tipo Object; Portanto, boxing e unboxing normalmente ocorrem quando você armazena ou recuperar um tipo de valor. No entanto, um List<T> pode fornecer um desempenho semelhante a uma matriz do mesmo tipo se nenhum realocações a é necessária; ou seja, se a capacidade inicial é uma boa aproximação do tamanho máximo da lista.
Na maioria dos casos em se que necessita de uma matriz pode-se usar um ArrayList ou um List<T>; elas são mais fáceis de usar e, em geral, têm desempenho similar a uma matriz de mesmo tipo.
Array está no namespace System; ArrayList está no namespace System.Collections; List<T> está no namespace System.Collections.Generic.