Baixe o app para aproveitar ainda mais
Prévia do material em texto
J ava 2 C ollections F ramework Introdução • O que é uma coleção? – Um objeto que agrupa múltiplos elementos em uma única unidade • Usadas para armazenar, recuperar e manipular elementos que formam um grupo natural. • E x.: Vector, Has htable, array 2 C ollections F ramework • C onjunto de interfaces , implementações e algoritmos – Interfac es : E stes s ão os tipos de dados abstratos que representam coleções . – Implementaç ões : E stas s ão as implementações concretas da coleção de interfaces . – Alg oritmos : E stes s ão os métodos que executam computações úteis , tais como busca e ordenação nos objetos que implementam as interfaces de coleta. O s algoritmos devem ser polimórficos , ou seja, o mesmo método pode ser usado em muitas implementações diferentes da interface de coleta apropriado. 3 Vantagens • R eduz es forço de programação • Aumenta velocidade e qualidade na programação • P ermite interoperabilidade entre AP I´s • R eduz es forço para aprender uma nova AP I • R eduz es forço para criar uma nova AP I • P romove reuso 4 Intefaces 5 Mais detalhes 6 Interface C ollection • Define as funcionalidades bás icas que os seus subtipos têm de definir: – .add(O bjecto obj); – .addAll(C ollection col); – .remove(O bjecto obj); – .removeAll(C ollection col); 7 Interface Map • Interface que permite armazenar pares de chave valor, is to é, para cada chave inserida exis te um valor que lhe es tá associado. • As chaves s ão obrigatoriamente únicas , enquanto que os valores que lhes es tão associados podem ser repetidos . • Não é um subtipo de C ollection. 8 Interface Map • E m vez do .add(Objecto obj), tem o .put((Objecto)C have, (Objecto)Valor); • E m vez do .contains (Objecto obj), tem o .containsK ey((O bjecto)C have), para saber se contém uma determinada chave, e .contains ((Objecto)Valor), para saber se contém um determinado valor. 9 Iterator • P ara navegar pelos objetos de uma coleção devemos utilizar o Iterator. • Uma coleção pode ter vários Iterators . – O s principais métodos : • hasNext() - verifica se exis tem mais elementos . • next() - recupera o próximo elemento. • remove() - remove um elemento. 10 E xemplo de C ollection usando Iterator 11 package com.javabasico.collection; import java.util.*; public class ExemploDeCollection { public static void main(String[] args) { /* * Essa é a sintaxe para criar uma coleção simples. */ Collection colecao = new ArrayList(); /* * Agora, vamos criar alguns objetos e fazer as atribuições. * */ ObjetoQualquer objeto1 = new ObjetoQualquer(); objeto1.setNome("Primeiro nome"); ObjetoQualquer objeto2 = new ObjetoQualquer(); objeto2.setNome("Segundo nome"); ObjetoQualquer objeto3 = new ObjetoQualquer(); objeto3.setNome("Terceiro nome"); E xemplo de C ollection usando Iterator 12 /* * O último passo é adicionar cada um dos objetos em nossa coleção. */ colecao.add(objeto1); colecao.add(objeto2); colecao.add(objeto3); /* * Para recuperar os objetos de uma coleção devemos utilizar um Iterator. * Veja o exemplo de sintaxe. * Observação: só existe a possibilidade de navegação para frente. */ Iterator iteColecao = colecao.iterator(); while (iteColecao.hasNext()) { //Conversão obrigatória. Atenção a esse detalhe!!! ObjetoQualquer objetoRecuperado = (ObjetoQualquer) iteColecao.next(); //Pronto, agora você pode utilizar o objeto que foi recuperado da maneira que quiser. System.out.println("Objeto recuperado: " + objetoRecuperado.getNome()); } } } Interface S et • C oleção que não contém elementos duplicados . • Não garante ordem entre os elementos • Não acrescenta métodos • C lasses que a implementam: – HashS et – T reeS et – L inkedHashS et 13 Implementações da interface S et • HashS et – Armazena elementos em uma tabela de hash(hash table) possuindo melhor performance, mas não oferece garantias de ordenação. • T reeS et – Armazena elementos em um tipo de árvore binária conhecida, garantindo as s im a ordem entre s eus elementos • L inkedHashS et - Armazena elementos em uma tabela de has h, mas mantém uma lis ta encadeada utilizada para manter a ordem de ins erção dos elementos . 14 E xemplo utilizando a interface S et package com.javabasico.collection; import java.util.*; public class ExemploDeSet { public static void main(String[] args) { Set conjunto = new HashSet(); conjunto.add("um"); conjunto.add("dois"); conjunto.add("três"); conjunto.add(“quatro"); conjunto.add(“cinco"); Iterator iteConjunto = conjunto.iterator(); while (iteConjunto.hasNext()) { System.out.println(iteConjunto.next()); } } } 15 Interface S et • Métodos – S ize(): R etorna o número de elementos da coleção. – IsE mpty(): R etorna um booleano indicando se a coleção es tá ou não vaz ia. – Add(O bject obj): Adiciona obj ao conjunto se es te não pertencer ao mesmo. 16 Interface L is t • C oleção ordenada (S equência) • P ode ter duplicatas • C ontrole na pos ição de inserção ou remoção • Acesso aos elementos pelo índice 17 Implementações da interface L is t • ArrayL is t – (Mais utilizada) oferece tempo constante de acesso e de pos icionamento sendo s implesmente rápido. B oa quando se deseja recuperar elementos no array. • L inkedL ist - Implementação baseada em lis ta encadeada. B oa quando se utiliza muita inserção e remoção na lis ta. 18 Interface Map • Mapeamento de chaves em valores • Não possui chaves duplicadas • C ada chave leva a somente um elemento • Implementações de Map – hashMap – treeMap 19 Métodos Map • put(Object key, Object value) – acrescenta um objeto na lis ta, associando-o a uma chave. • get(Object key) - retorna um objeto através de sua chave. • values () - retorna uma C ollection com os valores . 20 E xemplo utilizando Map 21 package com.javaavancado.collection; import java.util.*; public class ExemploDeMap { public static void main(String[] args) { Map mapa = new HashMap(); mapa.put("um", "Primeiro valor"); mapa.put("dois", "Segundo valor"); mapa.put("tres", "Terceiro valor"); System.out.println("Valor recuperado: " + mapa.get("dois")); Set chaves = mapa.keySet(); Collection valores = mapa.values(); System.out.println(chaves); System.out.println(valores); } } E xercícios • 1) S em utilizar collection, utilize array de S tring para imprimir o nome de 4 pessoas . Depois utilizando o mesmo código tente incluir um novo elemento e o imprima. 22 R esposta • public c las s L ista { • • public s tatic void main (S tring args []) { • S tring pessoas [] = new S tring[4]; • pessoas[0] = "Dinardo"; • pessoas[1] = "R osa"; • pessoas[2] = "R afael"; • pessoas[3] = "Alex"; • for(int i=0; i < pessoas .length; i++) • S ystem.out.println(pessoas [i]); • • } • } 23 E mbora funcional, obs erve que não exis te a pos s ibilidade de adicionar mais um nome a es s a lis tagem, (partindo da idéia de que a clas s e já es ta compilada) . P ara iss o a s olução s eria criar uma nova matriz com um novo tamanho e fazer a trans ferência dos elementos de uma para a outra. Veja o exemplo dis s o a s eguir: • public c las s L istas { • public s tatic void main (S tring args[]) { • S tring pess oas []= new S tring[4]; • pes soas[0] = "Dinardo"; • pes soas[1] = "R osa"; • pes soas[2] = "R afael"; • pes soas[3] = "Alex"; • • S tring galera[] = new S tring[5]; • for (int i = 0; i < pess oas .length; i++) { • galera[i] = pess oas [i]; • } • galera[4] = "Anders on"; • pes soas = galera; • for(int i=0; i < pes s oas .length; i++) • Sys tem.out.println(pess oas[i]); • • } • } 24 Implementação Inteligente A solução mais adequada para res olver noss o problema s eria usar uma das classes do grupo L is t. No nosso exemplo usarei a classe ArrayL is t para demonstrar o procedimento. • import java.util.ArrayL is t; • • public c las s L is ta2 { • • public s tatic void main(S tring[] args ) { • ArrayL is t lis ta2 = new ArrayL is t(); • lis ta2.add("Dinardo"); • lis ta2.add("R os a"); • lis ta2.add("R afael"); • lis ta2.add("Alex"); • lis ta2.add("Anderson"); • for (int i = 0; i < lis ta2.s ize(); i++) { • S ystem.out.println(lis ta2.get(i)); • } • } • • } 25
Compartilhar