Definindo Coleções

Uma coleção é um conjunto de objetos tipados da mesma forma que são agrupados.

Objetos de qualquer tipo podem ser agrupados em uma coleção única do tipo Object para tirar proveito dos construtores que são inerentes a linguagem.Por exemplo, a instrução foreach do C# ( for eachno Visual Basic) espera que todos os objetos na coleção sejam de um Único Tipo.

No entanto, em uma coleção do tipo Object, processamento adicional é feito nos elementos individualmente, tais como conversão boxing e unboxing, que afetam o desempenho da coleção.Conversões boxing e unboxing ocorrem normalmente se armazenar ou recuperar um tipo de valor em uma coleção do tipo Object.

Coleções genéricas, como List<T>, e coleções não genéricas fortemente tipadas, como StringCollection, evitam essas ocorrências de desempenho se o tipo de elemento é o tipo que a coleção pretende ter (por exemplo, armazenando ou recuperando sequências de caracteres de um StringCollection).Além disso, coleções fortemente tipadas automaticamente executam validação de tipo de cada elemento adicionado à coleção.

Todas as coleções que direta ou indiretamente implementam a interface ICollection ou a interface genérica ICollection<T> compartilham vários recursos, bem como os métodos que adicionam, removem ou pesquisam elementos:

  • Um enumerador.

    Um enumerador é um objeto que executa iterações através de sua coleção associada.Ele pode ser considerado como um ponteiro móvel para qualquer elemento na coleção.Um enumerador pode ser associado com somente uma coleção, mas uma coleção pode ter vários enumeradores.A instrução foreach do C# (for each no Visual Basic) usa o enumerador e oculta a complexidade da manipulação de enumerador.

  • Membros de sincronização.

    Sincronização fornece segurança de segmentos quando estiver acessando os membros da coleção.As coleções não apresentam segurança de segmentos por padrão.Apenas algumas classes nos namespaces System.Collections fornecem um método Synchronize que cria um wrapper com segurança de segmentos através da coleção.No entanto, todas as classes em todos os namespaces System.Collections fornecem uma propriedade SyncRoot que pode ser usada por classes derivadas para criar seu próprios wrappers com segurança de segmentos.Uma propriedade IsSynchronized também é fornecida para determinar se a coleção tem segurança de segmentos.A sincronização não está disponível na interface genérica ICollection<T>.

  • O CopyTo método.

    Todas as coleções podem ser copiadas para uma matriz usando o método CopyTo; no entanto, a ordem dos elementos na nova matriz se baseia na sequência em que o enumerador os retorna.A matriz resultante é sempre unidimensional com um limite inferior de zero.

Observe que a interface genérica ICollection<T> possui membros adicionais, que não incluem a interface não genérica.

Os seguintes recursos são implementados em algumas classes no namespace System.Collections:

  • Capacidade e contagem.

    A capacidade de uma coleção é o número de elementos que ele pode conter.A contagem de uma coleção é o número de elementos que ele realmente contém.Um BitArray é um caso especial; sua capacidade é o mesmo que seu comprimento, que é o mesmo que a contagem.Algumas coleções ocultam a capacidade ou a contagem ou ambos.

    Todas as coleções nos namespaces System.Collections expandem automaticamente a capacidade quando a capacidade atual for atingida.A memória é realocada, e os elementos são copiados da coleção antiga para a nova.Isso reduz o código necessário para usar a coleção; no entanto, o desempenho da coleção pode ainda ser negativamente afetado.A melhor maneira para evitar desempenho ruim causado por várias realocações é definir a capacidade inicial a ser o tamanho estimado da coleção.

  • Limite inferior.

    O limite inferior de uma coleção é o índice do seu primeiro elemento.Indexado de todas as coleções no System.Collections espaços para nome têm um limite inferior zero. Array tem um limite inferior como zero por padrão, mas pode ser definido um limite inferior diferente ao criar uma instância das Matriz classe usandoCreateInstance.

Classes System.Collections geralmente podem ser categorizadas em três tipos:

  • Coleção comumente usadas.

    Essas são as variações comuns de dados de coleções, como tabelas de hash, filas, pilhas, dicionários e listas.Coleções comumente usadas têm versões genéricas e versões não genéricas.

  • Coleções de bits

    Coleções de bits são coleções cujos elementos são sinalizadores de bit.Elas se comportam de maneira ligeiramente diferente das outras coleções.

  • Coleções Especializadas

    São coleções com finalidades extremamente específicas, geralmente para manipular um tipo específico de elemento, como StringDictionary.

Não se esqueça de escolher cuidadosamente uma classe de coleção.Como cada coleção tem sua própria funcionalidade, cada uma também tem suas próprias limitações.Quanto mais especializada a coleção é, mais limitada ela é.Para obter dicas sobre como escolher uma coleção, consulte Selecionando uma classe de coleção.

Consulte também

Conceitos

Selecionando uma Classe de Coleção

Referência

System.Collections

System.Collections.Specialized

System.Collections.Generic

Outros recursos

Coleções e Estruturas de Dados