2. Conteúdo programático
● Coleções não genéricas
○ Tipos mais comuns
○ Dicionários
○ Filas e pilhas
● Generics
○ Características
○ Exemplos
3. Coleções
Namespace "System.Collections"
Nome Descrição
ArrayList Uma simples coleção de objetos redimensionável e baseada em
index.
SortedList Uma coleção de pares nome/valor ordenada por chave.
Queue Uma coleção de objetos First-in, First-out.
Stack Uma coleção de objetos Last-in, First-out.
Hashtable Uma coleção de pares de objeto nome/valor que podem ser
acessados tanto por nome como por índice. Eficiente para grandes
quantidades de dados.
BitArray Coleção Compactas de valores Boolean.
4. Coleções
Nome Descrição
StringCollection Simples coleção redimensionável de strings.
StringDictonary Uma coleção de pares de strings nome/valor que podem ser
acessados tanto por nome como por index.
ListDictionary Uma coleção eficiente para armazenar pequenas listas de objetos.
HybridDictionary Trabalha como uma ListDictionary quando o número de itens a serem
armazenados é pequeno e migra para Hashtable quando o número de
itens aumenta.
NameValueCollection Uma coleção de pares de strings nome/valor que podem ser
acessados tanto por nome como por index. Podem ser adicionados
vários valores em uma mesma chave.
5. Coleções - ArrayList
● Classe que permite armazenar qualquer
tipo de informação
○ Guarda tipos object
○ Tipos por valor causa boxing
● Tamanho é flexível, aumentando quando
chega ao máximo atual
6. Coleções - ArrayList - Métodos
● Add: Adiciona o parâmetro no fim da coleção
● AddRange: Adiciona itens de outra coleção no fim
desta coleção
● Insert: Adiciona item em um índice indicado
● InsertRange: Adiciona itens de outra coleção a partir
de um índice indicado
● Capacity: Número máximo de elementos do ArrayList;
● Count: Número atual de elementos do ArrayList;
● IndexOf: busca um objeto e retorna o índice onde ele
está
● Remove: Retira um objeto da lista
7. Coleções - ArrayList
Ao trabalhar com ArrayList, cuidado com os tipos
guardados. É necessário fazer conversão
ArrayList colecao = new ArrayList();
colecao.Add("Nome");
colecao.Add(3);
colecao.Add(DateTime.Now);
int valor = (int) colecao[1];
if( colecao.Contains("Nome") )
{
colecao.Remove("Nome");
}
8. Iterando em coleções
● Necessários para o foreach:
○ IEnumerable: GetEnumerator()
○ IEnumerator: Current() e MoveNext()
IEnumerator enumerator = coll.GetEnumerator();
while (enumerator.MoveNext()) {
Console.WriteLine(enumerator.Current);
}
foreach (string item in coll) {
Console.WriteLine(item);
}
10. Coleções sequencias
● Acesso sequencial aos dados
○ Queue (fila)
■ First In First Out (FIFO)
○ Stack (pilha)
■ First In Last Out (FILO)
11. Classe Queue (fila)
Métodos para enfileirar e tirar da fila
● Enqueue: Coloca na fila
● Dequeue: Tira da fila
● Peek(): Em alguns casos é melhor "dar uma olhada"
no item antes de acessá-lo na fila
Queue q = new Queue();
q.Enqueue("First");
q.Enqueue("Second");
q.Enqueue("Third");
while (q.Count > 0) {
Console.WriteLine(q.Dequeue());
}
12. Classe Stack (pilha)
Métodos para empilhar e desempilhar
● Pop()
● Push()
Stack s = new Stack();
s.Push("First");
s.Push("Second");
s.Push("Third");
s.Push("Fourth");
while (s.Count > 0) {
Console.WriteLine(s.Pop());
}
14. Um dicionário
● Criado para mapear chaves a valores
● Classe Hashtable trabalha com casos
● simples
HashTable emailLookup = new HashTable();
// Método Add recebe chave e valor
emailLookup.Add("sbishop@contoso.com", "Bishop, Scott");
// O indexador equivale ao método Add
emailLookup["sbishop@contoso.com"] = "Bishop, Scott";
15. Iterando um dicionário
● Deve-se acessar valor ou chave
● Cada item é um DictionaryEntry
● Propriedade Value
● Propriedade Key
foreach (DictionaryEntry elemento in
emailLookup)
{
Console.WriteLine(elemento.Value);
}
17. Generics x sem generics
Generics
● Permite que classes, structs, interfaces, delegates e
métodos sejam parametrizados pelos tipos de dados
que guardam e manipulam
Sem generics
● Uso de object para generalização
● Constante necessidade de Boxing e Unboxing
● Constante necessidade de casts
19. Generics
Por que usar Generics?
● Type checking, sem boxing, sem downcasts
● Reduz a quantidade de código
● Implementação de Generics funciona para
tipos por valor e por referência
21. Exercícios
1. Alimentar uma coleção não-genérica usando o tipo ArrayList, que
armazenará objetos de diferentes tipos. Em seguida varrer a lista
e escrever no Console o resultado do método ToString() de cada
elemento.
2. Alimentar uma lista genérica usando o tipo List<>, que
armazenará objetos do tipo de uma classe criada por você. Em
seguida, varrer a lista e mostrar algum dado do elemento na tela.
(ConsoleApplication)
3. Alimentar uma coleção genérica usando o tipo KeyValuePair<>,
onde será indexada por um número e armazenará objetos do tipo
de uma classe criada por você. Em seguida, varrer a lista e
mostrar algum dado do elemento na tela. (ConsoleApplication)