26
Collections Marco Antonio, Arquiteto de Software – TJDF [email protected] Atualizado Dezembro/2008

Collections Marco Antonio, Arquiteto de Software – TJDF [email protected] Atualizado Dezembro/2008

Embed Size (px)

Citation preview

Page 1: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

Collections

Marco Antonio,

Arquiteto de Software – TJDF

[email protected]

Atualizado Dezembro/2008

Page 2: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

Coleções

Mecanismo que permite o armazenamento de vários objetos.

É uma solução flexível e simples.

Principais métodos:add(), remove().

put(), get().

Não aceitam tipos primitivos (int, short, long, etc).

Page 3: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

Tipos

Listas e conjuntos.

Iterators.

Mapas.

Propriedades.

Page 4: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

Consequências

Eficiência no acesso, na busca ou na inserção.

Forma de organização de dados.

Page 5: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

Características

Oferece uma biblioteca de classes e interfaces (pacote java.util).

Implementa as principais estruturas de dados de forma reutilizável, usando apenas duas interfaces comuns.

Oferece implementações de cursor para iteração para extrair dados de qualquer estrutura usando uma única interface.

Page 6: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

As interfaces

Page 7: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

Implementações

Page 8: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

Várias possibilidades

Como você pôde ver, existem várias classes/interfaces com características específicas para cada necessidade.

Vamos ver as soluções mais comuns.

O mundo das coleções é muito extenso e não será totalmente coberto nesta apresentação.

Mesmo assim, a grande maioria das necessidades dos sistema é atendida com folga pelos exemplos aqui mostrados.

Page 9: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

Collection

Vamos dar uma olhada na interface java.util.Collection.

No exemplo utilizaremos a implementação ArrayList.

Page 10: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

Iterator

Para navegar pelos objetos de uma coleção devemos utilizar o Iterator.

Uma coleção pode ter vários Iterators.

Os principais métodos: hasNext() - verifica se existem mais elementos.

next() - recupera o próximo elemento.

remove() - remove um elemento.

Page 11: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

ObjetoQualquer

package com.javabasico.collection;

public class ObjetoQualquer { private String nome;

public String getNome() { return nome; }

public void setNome(String nome) { this.nome = nome; }}

Page 12: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

Exemplo completopackage 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");

Page 13: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

Exemplo completo /*

* 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());

}

}

}

Page 14: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

Pessoapackage com.javabasico.collection;

public class Pessoa {

private String nome;

private String endereco;

public String getNome() {

return nome;

}

public void setNome(String nome) {

this.nome = nome;

}

public String getEndereco() {

return endereco;

}

public void setEndereco(String endereco) {

this.endereco = endereco;

}

}

Page 15: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

FabricaDePessoaspackage com.javabasico.collection;

import java.util.*;

public class FabricaDePessoas {

public Collection getListaDePessoa() {

Pessoa jose = new Pessoa();

jose.setNome("Jose");

jose.setEndereco("Algum Lugar");

Pessoa carlos = new Pessoa();

carlos.setNome("Carlos");

carlos.setEndereco("Outro Lugar");

Pessoa diego = new Pessoa();

diego.setNome("Diego");

diego.setEndereco("Sua Casa");

Collection lista = new ArrayList();

lista.add(diego);

lista.add(jose);

lista.add(carlos);

return lista;

}

}

Page 16: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

ImprimeListaDePessoas

package com.javabasico.collection;import java.util.*;public class ImprimeListaDePessoas { public static void main(String[] args) {1. FabricaDePessoas fabrica = new FabricaDePessoas();2. Collection listaDePessoas = fabrica.getListaDePessoa();3. Iterator iteListaDePessoas = listaDePessoas.iterator();4. while (iteListaDePessoas.hasNext()) {5. Pessoa pessoaRecuperada = (Pessoa) iteListaDePessoas.next();6. System.out.println(pessoaRecuperada.getNome());7. System.out.println(pessoaRecuperada.getEndereco()); } }}

Page 17: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

ImprimeListaDePessoas

1. Cria a nossa fábrica de objetos.

2. Recupera a lista de pessoas da fábrica.

3. Recupera o iterator para ler os objetos da coleção.

4. Loop – iteração

5. Recupera a próxima pessoa.

6. Imprime o nome da pessoa.

7. Imprime o endereço da pessoa.

Page 18: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

Set

Agora vamos ver um exemplo de java.util.Set.

A implementação será HashSet.

Set não permite valores repetidos.

Page 19: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

ExemploDeSetpackage 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("um");

conjunto.add("um");

Iterator iteConjunto = conjunto.iterator();

while (iteConjunto.hasNext()) {

System.out.println(iteConjunto.next());

}

}

}

Page 20: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

sortpackage com.javabasico.collection;

import java.util.*;

public class TesteOrdenacao {

public static void main(String[] args) {

List listaDesordenada = new ArrayList();

listaDesordenada.add("Jose");

listaDesordenada.add("Maria");

listaDesordenada.add("Joao");

listaDesordenada.add("Airton");

listaDesordenada.add("Zulima");

// Imprima a lista desordenada

Collections.sort(listaDesordenada);

// Imprima a lista ordenada

}

}

Page 21: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

Map

O Map tem uma combinação de chaves/valores.

Funciona da seguinte maneira: uma chave está associada a um valor.

As chaves, claro, são únicas.

Os valores podem ser duplicados.

Page 22: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

Principais métodos

put(Object key, Object value) – acrescenta um objeto na lista, associando-o a uma chave.

get(Object key) - retorna um objeto através de sua chave.

keySet() - retorna um Set com as chaves

values() - retorna uma Collection com os valores.

Page 23: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

ExemploDeMappackage 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);

}

}

Page 24: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

Properties

Mecanismo utilizado principalmente para recuperar informações do sistema.

Page 25: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

ExemploDeProperties

package com.javabasico.collection;

import java.util.*;

public class ExemploDeProperties {

public static void main(String[] args) {

Properties p = System.getProperties();

System.out.println("Todas as propriedades do sistema operacional:");

System.out.println(p);

System.out.println("Imprimindo propriedades isoladas:");

System.out.println("Nome do SO: " + p.get("os.name"));

System.out.println("Nome do Runtime: " + p.get("java.runtime.name"));

System.out.println("País do usuário: " + p.get("user.country"));

// Imprima a versão do java, o diretório do usuário, o nome do usuário.

}

}

Page 26: Collections Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.net Atualizado Dezembro/2008

Dúvidas?