SlideShare une entreprise Scribd logo
1  sur  22
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ísticas
  ○ Exemplos
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.
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.
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
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
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");
}
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);
}
Coleções sequenciais
Coleções sequencias
● Acesso sequencial aos dados
  ○ Queue (fila)
     ■ First In First Out (FIFO)
  ○ Stack (pilha)
     ■ First In Last Out (FILO)
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());
           }
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());
            }
Dicionários
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";
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);
}
Generics
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
Generics
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
Generics
Também podem ser usados em métodos
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)
Dúvidas

Contenu connexe

Tendances

JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sérioLuciano Ramalho
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Marcos Castro
 
Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#Andre Nascimento
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em PythonLuciano Ramalho
 
Python em (mais de) 10 minutinhos
Python em (mais de) 10 minutinhosPython em (mais de) 10 minutinhos
Python em (mais de) 10 minutinhosRudá Moura
 
Programação orientada a objetos – III
Programação orientada a objetos – IIIProgramação orientada a objetos – III
Programação orientada a objetos – IIIGabriel Faustino
 
Curso de introdução ao ruby
Curso de introdução ao rubyCurso de introdução ao ruby
Curso de introdução ao rubyFrancis Wagner
 
Java Básico :: Introdução
Java Básico :: IntroduçãoJava Básico :: Introdução
Java Básico :: IntroduçãoWesley R. Bezerra
 
Estruturas de dados com C++ e STL
Estruturas de dados com C++ e STLEstruturas de dados com C++ e STL
Estruturas de dados com C++ e STLMarcos Castro
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Saulo Arruda
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosLeonardo Melo Santos
 

Tendances (19)

Introdução a Python
Introdução a PythonIntrodução a Python
Introdução a Python
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Aula02 - Lógica de Programação
Aula02 - Lógica de ProgramaçãoAula02 - Lógica de Programação
Aula02 - Lógica de Programação
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)
 
SFD - C# para a comunidade
SFD - C# para a comunidadeSFD - C# para a comunidade
SFD - C# para a comunidade
 
Java Básico
Java BásicoJava Básico
Java Básico
 
Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#Apostila de Introdução a POO com C#
Apostila de Introdução a POO com C#
 
Aula05 - Lógica de Programação
Aula05 - Lógica de ProgramaçãoAula05 - Lógica de Programação
Aula05 - Lógica de Programação
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
 
Python em (mais de) 10 minutinhos
Python em (mais de) 10 minutinhosPython em (mais de) 10 minutinhos
Python em (mais de) 10 minutinhos
 
Programação orientada a objetos – III
Programação orientada a objetos – IIIProgramação orientada a objetos – III
Programação orientada a objetos – III
 
Aula python
Aula pythonAula python
Aula python
 
Curso de introdução ao ruby
Curso de introdução ao rubyCurso de introdução ao ruby
Curso de introdução ao ruby
 
Java Básico :: Introdução
Java Básico :: IntroduçãoJava Básico :: Introdução
Java Básico :: Introdução
 
Estruturas de dados com C++ e STL
Estruturas de dados com C++ e STLEstruturas de dados com C++ e STL
Estruturas de dados com C++ e STL
 
Python + algoritmo
Python + algoritmoPython + algoritmo
Python + algoritmo
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
 

En vedette

Posturi complete viabilitate cel putin 4 ani arges 27.04.2016 edu.ro
Posturi complete viabilitate cel putin 4 ani arges 27.04.2016 edu.roPosturi complete viabilitate cel putin 4 ani arges 27.04.2016 edu.ro
Posturi complete viabilitate cel putin 4 ani arges 27.04.2016 edu.rosparkss
 
How to create a Password Protected Page in Blogger
How to create a Password Protected Page in BloggerHow to create a Password Protected Page in Blogger
How to create a Password Protected Page in BloggerBlogger Spice
 
Maria camila trujillo
Maria camila trujilloMaria camila trujillo
Maria camila trujilloKmi Trujillo
 
Presentacion tp2 historia
Presentacion tp2 historiaPresentacion tp2 historia
Presentacion tp2 historiaBrenda Frank
 
Posturi complete viabilitatea sub 4 ani arges 19.04.2016 edu.ro
Posturi complete viabilitatea sub 4 ani arges 19.04.2016 edu.roPosturi complete viabilitatea sub 4 ani arges 19.04.2016 edu.ro
Posturi complete viabilitatea sub 4 ani arges 19.04.2016 edu.rosparkss
 
Posturi complete viabilitate mai mică de 4 ani Arges 17.02.2015
Posturi complete viabilitate mai mică de 4 ani Arges 17.02.2015Posturi complete viabilitate mai mică de 4 ani Arges 17.02.2015
Posturi complete viabilitate mai mică de 4 ani Arges 17.02.2015sparkss
 
Posturi ocupate localitate arges 28.03.2016 edu.ro
Posturi ocupate localitate arges 28.03.2016 edu.roPosturi ocupate localitate arges 28.03.2016 edu.ro
Posturi ocupate localitate arges 28.03.2016 edu.rosparkss
 
Lập Trình an toàn - Secure programming
Lập Trình an toàn - Secure programmingLập Trình an toàn - Secure programming
Lập Trình an toàn - Secure programmingbeatmaking
 
02 - Apresentação de dados em XML com XSL e HTML
02 - Apresentação de dados em XML com XSL e HTML02 - Apresentação de dados em XML com XSL e HTML
02 - Apresentação de dados em XML com XSL e HTMLCésar Augusto Pessôa
 
02 - Introdução a Projetos parte 2 - v1.0
02 - Introdução a Projetos parte 2 - v1.002 - Introdução a Projetos parte 2 - v1.0
02 - Introdução a Projetos parte 2 - v1.0César Augusto Pessôa
 
When Cyber Security Meets Machine Learning
When Cyber Security Meets Machine LearningWhen Cyber Security Meets Machine Learning
When Cyber Security Meets Machine LearningLior Rokach
 

En vedette (19)

Cristian angulo power
Cristian angulo powerCristian angulo power
Cristian angulo power
 
Data science
Data scienceData science
Data science
 
Posturi complete viabilitate cel putin 4 ani arges 27.04.2016 edu.ro
Posturi complete viabilitate cel putin 4 ani arges 27.04.2016 edu.roPosturi complete viabilitate cel putin 4 ani arges 27.04.2016 edu.ro
Posturi complete viabilitate cel putin 4 ani arges 27.04.2016 edu.ro
 
briceño
briceño briceño
briceño
 
Vida saludable
Vida saludableVida saludable
Vida saludable
 
How to create a Password Protected Page in Blogger
How to create a Password Protected Page in BloggerHow to create a Password Protected Page in Blogger
How to create a Password Protected Page in Blogger
 
Maria camila trujillo
Maria camila trujilloMaria camila trujillo
Maria camila trujillo
 
El potencial de la Economía Colaborativa en América Latina
El potencial de la Economía Colaborativa en América LatinaEl potencial de la Economía Colaborativa en América Latina
El potencial de la Economía Colaborativa en América Latina
 
Presentacion tp2 historia
Presentacion tp2 historiaPresentacion tp2 historia
Presentacion tp2 historia
 
Posturi complete viabilitatea sub 4 ani arges 19.04.2016 edu.ro
Posturi complete viabilitatea sub 4 ani arges 19.04.2016 edu.roPosturi complete viabilitatea sub 4 ani arges 19.04.2016 edu.ro
Posturi complete viabilitatea sub 4 ani arges 19.04.2016 edu.ro
 
Posturi complete viabilitate mai mică de 4 ani Arges 17.02.2015
Posturi complete viabilitate mai mică de 4 ani Arges 17.02.2015Posturi complete viabilitate mai mică de 4 ani Arges 17.02.2015
Posturi complete viabilitate mai mică de 4 ani Arges 17.02.2015
 
El poder y la salud
El poder y la saludEl poder y la salud
El poder y la salud
 
DotNet Remoting - .NET framework
DotNet Remoting - .NET frameworkDotNet Remoting - .NET framework
DotNet Remoting - .NET framework
 
Posturi ocupate localitate arges 28.03.2016 edu.ro
Posturi ocupate localitate arges 28.03.2016 edu.roPosturi ocupate localitate arges 28.03.2016 edu.ro
Posturi ocupate localitate arges 28.03.2016 edu.ro
 
Lập Trình an toàn - Secure programming
Lập Trình an toàn - Secure programmingLập Trình an toàn - Secure programming
Lập Trình an toàn - Secure programming
 
02 - Apresentação de dados em XML com XSL e HTML
02 - Apresentação de dados em XML com XSL e HTML02 - Apresentação de dados em XML com XSL e HTML
02 - Apresentação de dados em XML com XSL e HTML
 
Primeira aula e dinâmica
Primeira aula e dinâmicaPrimeira aula e dinâmica
Primeira aula e dinâmica
 
02 - Introdução a Projetos parte 2 - v1.0
02 - Introdução a Projetos parte 2 - v1.002 - Introdução a Projetos parte 2 - v1.0
02 - Introdução a Projetos parte 2 - v1.0
 
When Cyber Security Meets Machine Learning
When Cyber Security Meets Machine LearningWhen Cyber Security Meets Machine Learning
When Cyber Security Meets Machine Learning
 

Similaire à C# Coleções genéricas e não-genéricas

Similaire à C# Coleções genéricas e não-genéricas (20)

Curso java 08 - mais sobre coleções
Curso java   08 - mais sobre coleçõesCurso java   08 - mais sobre coleções
Curso java 08 - mais sobre coleções
 
Collection Java (2/2)
Collection Java (2/2)Collection Java (2/2)
Collection Java (2/2)
 
Java 12 Colecoes
Java 12 ColecoesJava 12 Colecoes
Java 12 Colecoes
 
Csharp fundamentals
Csharp fundamentalsCsharp fundamentals
Csharp fundamentals
 
Java: Collections
Java: CollectionsJava: Collections
Java: Collections
 
Aula 02 - JavaScript: Arrays
Aula 02 - JavaScript: ArraysAula 02 - JavaScript: Arrays
Aula 02 - JavaScript: Arrays
 
POO - 23 - Coleções da API do Java
POO -  23 - Coleções da API do Java POO -  23 - Coleções da API do Java
POO - 23 - Coleções da API do Java
 
Java básico - Módulo 06: Array
Java básico - Módulo 06: ArrayJava básico - Módulo 06: Array
Java básico - Módulo 06: Array
 
Collections Java (1/2)
Collections Java (1/2)Collections Java (1/2)
Collections Java (1/2)
 
4234 mysql
4234 mysql4234 mysql
4234 mysql
 
Apostila php 01
Apostila php 01Apostila php 01
Apostila php 01
 
Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections
 
Colecções do c#
Colecções do c#Colecções do c#
Colecções do c#
 
Slide Semana2 Rodrigo
Slide Semana2 RodrigoSlide Semana2 Rodrigo
Slide Semana2 Rodrigo
 
Java: Composicao e Array List
Java: Composicao e Array ListJava: Composicao e Array List
Java: Composicao e Array List
 
PHP Básico - Parte 3
PHP Básico - Parte 3PHP Básico - Parte 3
PHP Básico - Parte 3
 
Java: strings e arrays
Java: strings e arraysJava: strings e arrays
Java: strings e arrays
 
Arrays (vetores) em Java
Arrays (vetores) em JavaArrays (vetores) em Java
Arrays (vetores) em Java
 
Slide Semana2 Rodrigo2
Slide Semana2 Rodrigo2Slide Semana2 Rodrigo2
Slide Semana2 Rodrigo2
 
Slide Share s2 Rodd
Slide Share s2 RoddSlide Share s2 Rodd
Slide Share s2 Rodd
 

Plus de Leonardo Melo Santos

Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...
Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...
Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...Leonardo Melo Santos
 
Curso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETCurso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETLeonardo Melo Santos
 
Desenvolvimento de aplicações Java™ para TV Digital
Desenvolvimento de aplicações Java™ para TV DigitalDesenvolvimento de aplicações Java™ para TV Digital
Desenvolvimento de aplicações Java™ para TV DigitalLeonardo Melo Santos
 
Curso de J2ME - Parte 04 - Otimização
Curso de J2ME - Parte 04 - OtimizaçãoCurso de J2ME - Parte 04 - Otimização
Curso de J2ME - Parte 04 - OtimizaçãoLeonardo Melo Santos
 
Curso de J2ME - Parte 03 - Desenvolvimento de aplicações
Curso de J2ME - Parte 03 - Desenvolvimento de aplicaçõesCurso de J2ME - Parte 03 - Desenvolvimento de aplicações
Curso de J2ME - Parte 03 - Desenvolvimento de aplicaçõesLeonardo Melo Santos
 
Curso de J2ME - Parte 02 - Ambiente de desenvolvimento
Curso de J2ME - Parte 02 - Ambiente de desenvolvimentoCurso de J2ME - Parte 02 - Ambiente de desenvolvimento
Curso de J2ME - Parte 02 - Ambiente de desenvolvimentoLeonardo Melo Santos
 
Curso de J2ME - Parte 01 - Conceitos básicos
Curso de J2ME - Parte 01 - Conceitos básicosCurso de J2ME - Parte 01 - Conceitos básicos
Curso de J2ME - Parte 01 - Conceitos básicosLeonardo Melo Santos
 
Fundamentos de sistemas de informação
Fundamentos de sistemas de informaçãoFundamentos de sistemas de informação
Fundamentos de sistemas de informaçãoLeonardo Melo Santos
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosLeonardo Melo Santos
 
Trabalho em equipe e ética no trabalho
Trabalho em equipe e ética no trabalhoTrabalho em equipe e ética no trabalho
Trabalho em equipe e ética no trabalhoLeonardo Melo Santos
 
Verificação e validação de software
Verificação e validação de softwareVerificação e validação de software
Verificação e validação de softwareLeonardo Melo Santos
 
Marketing pessoal e as redes sociais
Marketing pessoal e as redes sociaisMarketing pessoal e as redes sociais
Marketing pessoal e as redes sociaisLeonardo Melo Santos
 

Plus de Leonardo Melo Santos (15)

Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...
Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...
Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...
 
Curso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETCurso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NET
 
Scrum - Visão Geral
Scrum - Visão GeralScrum - Visão Geral
Scrum - Visão Geral
 
Desenvolvimento de aplicações Java™ para TV Digital
Desenvolvimento de aplicações Java™ para TV DigitalDesenvolvimento de aplicações Java™ para TV Digital
Desenvolvimento de aplicações Java™ para TV Digital
 
Web Services XML - .NET framework
Web Services XML - .NET frameworkWeb Services XML - .NET framework
Web Services XML - .NET framework
 
Curso de J2ME - Parte 04 - Otimização
Curso de J2ME - Parte 04 - OtimizaçãoCurso de J2ME - Parte 04 - Otimização
Curso de J2ME - Parte 04 - Otimização
 
Curso de J2ME - Parte 03 - Desenvolvimento de aplicações
Curso de J2ME - Parte 03 - Desenvolvimento de aplicaçõesCurso de J2ME - Parte 03 - Desenvolvimento de aplicações
Curso de J2ME - Parte 03 - Desenvolvimento de aplicações
 
Curso de J2ME - Parte 02 - Ambiente de desenvolvimento
Curso de J2ME - Parte 02 - Ambiente de desenvolvimentoCurso de J2ME - Parte 02 - Ambiente de desenvolvimento
Curso de J2ME - Parte 02 - Ambiente de desenvolvimento
 
Curso de J2ME - Parte 01 - Conceitos básicos
Curso de J2ME - Parte 01 - Conceitos básicosCurso de J2ME - Parte 01 - Conceitos básicos
Curso de J2ME - Parte 01 - Conceitos básicos
 
Sistemas Workflow
Sistemas WorkflowSistemas Workflow
Sistemas Workflow
 
Fundamentos de sistemas de informação
Fundamentos de sistemas de informaçãoFundamentos de sistemas de informação
Fundamentos de sistemas de informação
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetos
 
Trabalho em equipe e ética no trabalho
Trabalho em equipe e ética no trabalhoTrabalho em equipe e ética no trabalho
Trabalho em equipe e ética no trabalho
 
Verificação e validação de software
Verificação e validação de softwareVerificação e validação de software
Verificação e validação de software
 
Marketing pessoal e as redes sociais
Marketing pessoal e as redes sociaisMarketing pessoal e as redes sociais
Marketing pessoal e as redes sociais
 

C# Coleções genéricas e não-genéricas

  • 1. C# Coleções genéricas e não- genéricas Leonardo Melo Santos http://about.me/leonardomelosantos
  • 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
  • 20. Generics Também podem ser usados em métodos
  • 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)