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

Preview:

Citation preview

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).

Tipos

Listas e conjuntos.

Iterators.

Mapas.

Propriedades.

Consequências

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

Forma de organização de dados.

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.

As interfaces

Implementações

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.

Collection

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

No exemplo utilizaremos a implementação ArrayList.

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.

ObjetoQualquer

package com.javabasico.collection;

public class ObjetoQualquer { private String nome;

public String getNome() { return nome; }

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

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

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

}

}

}

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;

}

}

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;

}

}

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

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.

Set

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

A implementação será HashSet.

Set não permite valores repetidos.

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

}

}

}

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

}

}

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.

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.

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

}

}

Properties

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

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.

}

}

Dúvidas?

Recommended