C#Coleções genéricas e não-       genéricas      Leonardo Melo Santos      http://about.me/leonardomelosantos
Conteúdo programático● Coleções não genéricas  ○ Tipos mais comuns  ○ Dicionários  ○ Filas e pilhas● Generics  ○ Caracterí...
ColeçõesNamespace "System.Collections"Nome         DescriçãoArrayList    Uma simples coleção de objetos redimensionável e ...
ColeçõesNome                  DescriçãoStringCollection      Simples coleção redimensionável de strings.StringDictonary   ...
Coleções - ArrayList● Classe que permite armazenar qualquer  tipo de informação  ○ Guarda tipos object  ○ Tipos por valor ...
Coleções - ArrayList - Métodos● Add: Adiciona o parâmetro no fim da coleção● AddRange: Adiciona itens de outra coleção no ...
Coleções - ArrayListAo trabalhar com ArrayList, cuidado com os tiposguardados. É necessário fazer conversãoArrayList colec...
Iterando em coleções● Necessários para o foreach:    ○ IEnumerable: GetEnumerator()    ○ IEnumerator: Current() e MoveNext...
Coleções sequenciais
Coleções sequencias● Acesso sequencial aos dados  ○ Queue (fila)     ■ First In First Out (FIFO)  ○ Stack (pilha)     ■ Fi...
Classe Queue (fila)Métodos para enfileirar e tirar da fila● Enqueue: Coloca na fila● Dequeue: Tira da fila● Peek(): Em alg...
Classe Stack (pilha)Métodos para empilhar e desempilhar● Pop()● Push()            Stack s = new Stack();            s.Push...
Dicionários
Um dicionário● Criado para mapear chaves a valores● Classe Hashtable trabalha com casos● simplesHashTable emailLookup = ne...
Iterando um dicionário●   Deve-se acessar valor ou chave●   Cada item é um DictionaryEntry●   Propriedade Value●   Proprie...
Generics
Generics x sem genericsGenerics● Permite que classes, structs, interfaces, delegates e  métodos sejam parametrizados pelos...
Generics
GenericsPor que usar Generics?● Type checking, sem boxing, sem downcasts● Reduz a quantidade de código● Implementação de G...
GenericsTambém podem ser usados em métodos
Exercícios1. Alimentar uma coleção não-genérica usando o tipo ArrayList, que   armazenará objetos de diferentes tipos. Em ...
Dúvidas
Próximos SlideShares
Carregando em…5
×

Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas

1.991 visualizações

Publicada em

Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas

Publicada em: Tecnologia
  • Seja o primeiro a comentar

Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas

  1. 1. C#Coleções genéricas e não- genéricas Leonardo Melo Santos http://about.me/leonardomelosantos
  2. 2. Conteúdo programático● Coleções não genéricas ○ Tipos mais comuns ○ Dicionários ○ Filas e pilhas● Generics ○ Características ○ Exemplos
  3. 3. ColeçõesNamespace "System.Collections"Nome DescriçãoArrayList 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. 4. ColeçõesNome DescriçãoStringCollection 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. 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. 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. 7. Coleções - ArrayListAo trabalhar com ArrayList, cuidado com os tiposguardados. É necessário fazer conversãoArrayList 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. 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);}
  9. 9. Coleções sequenciais
  10. 10. Coleções sequencias● Acesso sequencial aos dados ○ Queue (fila) ■ First In First Out (FIFO) ○ Stack (pilha) ■ First In Last Out (FILO)
  11. 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. 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()); }
  13. 13. Dicionários
  14. 14. Um dicionário● Criado para mapear chaves a valores● Classe Hashtable trabalha com casos● simplesHashTable emailLookup = new HashTable();// Método Add recebe chave e valoremailLookup.Add("sbishop@contoso.com", "Bishop, Scott");// O indexador equivale ao método AddemailLookup["sbishop@contoso.com"] = "Bishop, Scott";
  15. 15. Iterando um dicionário● Deve-se acessar valor ou chave● Cada item é um DictionaryEntry● Propriedade Value● Propriedade Keyforeach (DictionaryEntry elemento in emailLookup){ Console.WriteLine(elemento.Value);}
  16. 16. Generics
  17. 17. Generics x sem genericsGenerics● Permite que classes, structs, interfaces, delegates e métodos sejam parametrizados pelos tipos de dados que guardam e manipulamSem generics● Uso de object para generalização● Constante necessidade de Boxing e Unboxing● Constante necessidade de casts
  18. 18. Generics
  19. 19. GenericsPor 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
  20. 20. GenericsTambém podem ser usados em métodos
  21. 21. Exercícios1. 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)
  22. 22. Dúvidas

×