Programação Orientada a Objetos Prof. Kléber de Oliveira Andrade pdjkleber@gmail.com
Coleções, Propriedades, Resources e Strings (Parte 2)
Coleções É comum usarmos um objeto que armazena vários outros Agenda é um exemplo API Collections fornece interfaces e classes para coleções Pacote java.util Uma coleção é um objeto que agrupa vários outros Também chamado contêiner Interface Collection 07/09/2011 Prof. Kléber de Oliveira Andrade 3
Principais interfaces/classes de Collection <<interface>> Collection <<interface>> Map <<interface>> List <<interface>> Set HashMap TreeMap ArrayList Vector HashSet TreeSet Hashtable LinkedList 07/09/2011 Prof. Kléber de Oliveira Andrade 4
Interfaces A API oferece alguns tipos de coleções: conjuntos, listas e mapas. Conjunto (Set) Uma coleção de elementos que não mantém uma ordem nem uma contagem dos elementos Cada elemento ou está no conjunto ou não (não há elementos repetidos) Lista (List) Uma sequência de elementos Mantém dados a respeito de ambos, a ordem e a contagem. Mapa (Map) Uma associação entre chaves e valores Ele mantém um conjunto de chaves e mapeia cada chave para um único valor. 07/09/2011 Prof. Kléber de Oliveira Andrade 5
Collection É a raiz da hierarquia Collection Representa um grupo de objetos conhecidos como seus elementos Contém o denominador comum do que todas as coleções implementam Usada para passagem de coleções como parâmetros e para manipulação genérica de grupos de dados A plataforma Java não fornece implementação direta desta interface Implementações são de suas sub-interfaces Possui métodos para acessar, buscar e remover elementos 07/09/2011 Prof. Kléber de Oliveira Andrade 6
Desvantagens das Coleções Menos eficiente que vetores Não aceitam tipos primitivos (só empacotados) Não permitem restringir o tipo específico dos objetos guardados 9tuo é java.lang.object) Aceitam qualquer objeto: uma coleção de Galinhas aceita objetos do tipo Raposa. Requer cast na saída para poder usar objeto 07/09/2011 Prof. Kléber de Oliveira Andrade 7
Set Um conjunto é uma coleção que não tem elementos duplicados. Podem ser mantidos ordenados (SortedSet) ou não. Modela a abstração matemática para conjuntos. Contém os mesmo métodos de Collection Com a restrição de que não podem ser repetidos Três implementações HashSet: implementado com tabela hash TreeSet: implementado com árvore LinkedHashSet: implementado com tabela hash e lista ligadas 07/09/2011 Prof. Kléber de Oliveira Andrade 8
Exemplo usando Set Genéricos Ao ser criado, podemos informar o tipo (classe) do elemento a ser armazenado na coleção HashSet<String> nomes = new HashSet<String>(); Isto porque a coleção é implementada com tipos genéricos onde o tipo é determinado no momento da execução 07/09/2011 Prof. Kléber de Oliveira Andrade 9
Percorrendo coleções Existe duas formas de percorrer coleções 1. Iterator Objeto que permite que todos os elementos da coleção sejam acessados Não sabe-se sobre a implementação Principais métodos: boolean hasnext() : informa se ainda há elementos a serem visitados next(): retorna o próprio elemento a ser visitado 2. For-each É implementado usando o iterator Construção da linguagem JAVA for (Tipo objeto: Coleção) {... } Exemplo: for (String nome: nomes) {... } 07/09/2011 Prof. Kléber de Oliveira Andrade 10
Exemplos Com for-each:... Com iterator:... 07/09/2011 Prof. Kléber de Oliveira Andrade 11
List É uma Collection ordenada (algumas vezes chamada de sequência) Podem contem elementos duplicados Em adição as operações de Collection, inclue: Acesso posicional: manipula elementos baseado na sua posição numérica na lista (índice) Pesquisa: pesquisa por um objeto específico na lista e retorna a sua posição númerica Iteração: herda a semântica Iterator para tomar vantagem da natureza sequencial da lista 07/09/2011 Prof. Kléber de Oliveira Andrade 12
List Duas implementações ArrayList: List implementada com Array LinkedList: implementada com list ligada Métodos de acesso através de índice get(int i): retorna elemento do índice i remove(int i): remove elemento do índice i add(<t> elemento): adiciona elemento depois do último índice Elementos começam no indice zero como nos arrays. 07/09/2011 Prof. Kléber de Oliveira Andrade 13
List Cada elemento tem o seu sucessor (menos o último) e o seu antecessor (menos o primeiro) As operações mais importantes em lista são: Adicionar um objeto em qualquer lugar da lista; Remover um objeto de qualquer lugar da lista; Obter o elemento de qualquer lugar da lista; Percorrer os elementos da lista; Verificar se um elemento está na lista; Descobrir o índice de um elemento na lista; Obter o número de elementos da coleção 07/09/2011 Prof. Kléber de Oliveira Andrade 14
Exemplo usando List 07/09/2011 Prof. Kléber de Oliveira Andrade 15
Map Um mapa armazena pares (chave, valor) chamados de itens. Chaves e valores podem ser de qualquer tipo. As chaves armazenadas nos mapas podem estar ordenados ou não. A chave é utilizada para achar o elemento de forma rápida, utilizando estruturas especiais. Um mapa não pode conter chaves duplicadas Modela a abstração matemática de função Não existe chaves duplicadas em um mapa Também são conhecidos como dicionários 07/09/2011 Prof. Kléber de Oliveira Andrade 16
Map A plataforma Java contém três implementações Map de propósito geral. HashMap, TreeMap e LinkedHashMap O comportamento e a performance são análogos ao de HashSet, TreeSet e LinkedHashSet. Principais métodos put (chave, valor): coloca um novo par chave/elemento no mapa get (chave): retorna o valor correspondente a chava passada como parâmetro 07/09/2011 Prof. Kléber de Oliveira Andrade 17
Exemplo usando Map 07/09/2011 Prof. Kléber de Oliveira Andrade 18
Exercício 1 Criar uma classe ListaDePessoa que possua: Uma lista de Strings para armazenar nomes Um método para adicionar nomes Um método para receber o tamanho da lista Um métod para lista todas as pessoas da lista No programa principal: Crie um menu de opções onde: 1. Adicione um novo nome a lista 2. Exiba todos os nomes da lista 3. Sair do programa Após exibir o menu, mostre quantas pessoas tem na lista 07/09/2011 Prof. Kléber de Oliveira Andrade 19
Exercício 2 Implemente uma Type Safe Collection (ArrayList) que possa conter Círculos. Teste a coleção adicionando, removendo, buscando e imprimindo os objetos da lista Crie um método que retorne a lista como um array. 07/09/2011 Prof. Kléber de Oliveira Andrade 20