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 completo
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");
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());
}
}
}
Pessoa
package 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;
}
}
FabricaDePessoas
package 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.
ExemploDeSet
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("um");
conjunto.add("um");
Iterator iteConjunto = conjunto.iterator();
while (iteConjunto.hasNext()) {
System.out.println(iteConjunto.next());
}
}
}
sort
package 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.
ExemploDeMap
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);
}
}
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?
Download

public class