Collections
De vez em quando meus coleguinhas me perguntam , virso qual collection eu uso para fazer isso , qual que usa pra fazer aquilo , ai achei um PPT que eu tinha criado na minha época de “Bras Figueiredo” , estamos falando ai de .net framework 2.0 e é impressionante como esse tipo de coisa continua atual. Isso acontece por que estamos falando de conceitos muito basilares da área da computação, collection, são abstrações de conceitos aprendidos na área de Estrutura de dados.
O que São
- As coleções são grupos de objetos similarmente iguais.
- São similares aos arrays mas, com regras de negocio
próprias podendo se comportar como filas ou pilhas etc. - Podem ser genéricas ou não
- Não precisam de dimensionamento prévio
- São a base do LINQ
Onde estão ?
No .NET Framework Class Library temos um Namespace específico qual contem diversas coleções para serem utilizadas em nossas aplicações. Este
Namespace chama-se System.Collections.
Dentro deste Namespace, encontramos várias classes e Interfaces para a criação dos mais diversos tipos de coleções
As coleções estão definidas em três categorias:
- Coleções Ordenadas
- Coleções Indexadas
- Coleções baseadas em uma “chave-e-valor”
Coleções Ordenadas: São coleções que são distinguidas apenas pela ordem de inserção e assim controla a ordem em que os objetos podem ser recuperados da coleção, Stack , Queue são exemplos deste tipo de coleção.
Coleções Indexadas: São coleções que são distinguidas pelo fato de que seus
valores e/ou objetos podem ser recuperados/acessados através de um índice
numérico (baseado em 0 (zero)). System.Collections.ArrayList é um exemplo
deste tipo de coleção.
Coleções “Chave-e-Valor”: Como o próprio tipo diz, é uma coleção que
contém uma chave associado a algum tipo. Seus índices são classificados no
valor da chave e podem ser recuperados na ordem classificado pela
enumeração. System.Collections.HashTable é um exemplo deste tipo de
coleção.
Exemplos de Collections
- ArrayList
- Queue (FIFO FILA)
- Stack(LIFO PILHA)
- HybridDictionary
- ListDictionary
- Hashtable
- StringCollection
- NameValueCollection
- SortedList
- List<T>
- Queue <T>
- Stack<T>
- Dictionary<Tkey,Tvalue>
- HashSet<T>
ArrayList



Queue FIFO FILA

Stack LIFO PILHA

Collections Chave Valor
Esse tipo permite a adição de dois elementos básicos uma chave única e um valor facilitando assim a busca de um item. Para iterar com seus itens precisamos de:
- DictionaryEntry
- KeyValuePair<Tkey,Tvalue>
Hashtable
Hashtable Ordena e Aceita keys de diferentes tipos

ListDictionary
Essa classe funciona da mesma forma que a classe Hashtable.
A diferença esta na performance para até 10 elementos a classe ListDictionary é muito rápida ,para mais elementos ela perde desempenho, resumindo para até 10 elementos utilize a classe ListDictionary e para mais de 10 elementos utilize a classe Hashtable.

HybridDictionary
Essa classe muito interessante porque ela usa estruturas diferentes conforme a quantidade de elementos na coleção até 10 elementos é utilizado a classe ListDictionary, para mais de 10 elementos a classe Hashtable é utilizada.
Assim o melhor classe é sempre utilizada.

StringCollection
É uma representação da classe ArrayList com a diferença de receber String como elementos

NameValueCollection
Representa uma coleção de Teclas associado String e String valores que podem ser acessados com a chave ou com o índice;

LinkedList
fornecer acesso muito rápida inserção ou exclusão de um membro da
lista.
Cada membro de uma lista ligada contém um ponteiro para o
próximo na lista para inserir um membro na posição i:

CollectionsUtil
Com essa classe é possível criar coleções case-insensitive para as classes Hashtable e SortedList.
Através dos métodos estáticos:
- CreateCaseInsensitiveHashtable
- CreateCaseInsensitiveSortedList respectivamente.
Cria um objeto do tipo Hashtable com
chave case-insensitive

Cria um objeto do tipo SortedList com
chave case-insensitive

Bem é isso ai, esse é das antigas , mas o impressionante é que essas listas nunca vão morrer por que estamos falando de implementações de um dos conceitos mais utilizados da ciência da computação.
