Buscar

18 - Coleções

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 31 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 31 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 31 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Algoritmos e Programação 
Orientada a Objetos
Coleções
ColeçõesColeções
• A estrutura de coleções do Java (Java Collections
Framework) oferece ao programador estruturas de
dados pré-empacotadas e os métodos para manipular
essas estruturas de dados.
• Em vez de termos de criar estruturas de dados
simplesmente utilizamos as estruturas de dadossimplesmente utilizamos as estruturas de dados
disponibilizadas, sem ter a preocupação de como essas
estruturas estão implementadas.
• Com isso pode se programar de forma mais rápida no
uso de coleções de objetos em memória, com melhor
desempenho, maior velocidade e minimizando uso de
recurso de memória
ColeçõesColeções
• A coleção é uma estrutura de dados – na realidade um
objeto – que pode armazenar outros objetos.
• As coleções são estruturadas por meio de interfaces
que definem que operações uma aplicação pode
executar sobre cada tipo de coleção.
• Por sua vez, as implementações das interfaces das• Por sua vez, as implementações das interfaces das
coleções, executam operações particulares, que são
utilizadas de acordo com a necessidade da aplicação.
• As classes e interfaces onde se encontram as coleções
estão no pacote java.util. Entre as interfaces temos:
Collection, List, Set e Map.
Coleções Coleções -- InterfacesInterfaces
Coleções Coleções -- ImplementaçõesImplementações
java.util.List java.util.Set java.util.Map
HashTableArrayList Vector HashMapTreeSet
LinkedList TreeMapHashSet
ColeçõesColeções
• A interface Collection é interface raiz na hierarquia de
coleções a partir da qual se derivam as interfaces Set e
List.
• A Map não deriva de Collection.
• A interface Collection contém as operações para
adicionar, retirar, comparar objetos da lista.adicionar, retirar, comparar objetos da lista.
• A interface Collection fornece um método que devolve
um objeto da classe Iterator, o qual permite a
manipulação dos objetos existentes dentro da coleção.
Coleções Coleções -- ListasListas
• O mundo das coleções é muito extenso e não será
totalmente coberto nesta apresentação.
• Vamos abordar a interface Collection com ênfase na
interface List que deriva de Collection.
• Como classe de implementação da interface List,• Como classe de implementação da interface List,
utilizaremos o ArrayList.
• As demais interfaces e classes de implementações
serão apenas definidas.
Collection Collection 
Atuam sobre elementos 
individuais da coleção
Atuam sobre todos os 
elementos da coleção
size containsAll
• A interface Collection define o seguinte conjunto de
métodos.
isEmpty addAll
contains removeAll
add clear
remove toArray
iterator
ListList
• Adiciona à Collection os métodos
– add (int index, Object element)
– set (int index, Object element)
– Object get (int index)
– int indexOf (Object element)– int indexOf (Object element)
– int lastIndexOf (Object element)
– List sublist (int from, int to)
• É melhor precorrer uma lista utilizando o Iterator do 
que utilizando os métodos get e size
Coleções Coleções -- ListasListas
• Uma lista é uma coleção que permite elementos
duplicados e mantém uma ordenação específica entre
os elementos.
• Há a garantia de que, quando percorrer a lista, os• Há a garantia de que, quando percorrer a lista, os
elementos serão encontrados em uma ordem pré-
determinada, definida na hora da inserção dos
mesmos.
Coleções Coleções -- ListasListas
• A List é uma das interfaces que deriva da interface
Collection.
• Uma classe que implementa a interface List assim
como num vetor simples tem o índice do primeiro
elemento em zero.
• Além dos métodos da interface herdados da Collection,• Além dos métodos da interface herdados da Collection,
List fornece métodos para manipular objetos utilizando
seus índices dentro da lista.
• A interface List é implementada pelas classes ArrayList,
LinkedList e Vector.
Coleções Coleções -- ListasListas
• ArrayList – é uma implementação da interface List
como um vetor redimensionável, ou seja, a alocação de
objetos é dinâmica, cresce à medida que novos objetos
são inseridos, diferentemente do vetor simples que
precisa de tamanho pré-determinado.
• O comportamento e os recursos da classe ArrayList são• O comportamento e os recursos da classe ArrayList são
semelhantes aos da classe Vector.
• A LinkedList é uma implementação da interface List
como um lista encadeada (que é uma lista em que os
objetos estão interligados como referência entre eles).
Aplicavel para implementação de estruturas de dados
tais como pilhas, filas e árvores.
Coleções Coleções -- ListasListas
• ArrayList – é uma implementação da interface List
como um vetor redimensionável, ou seja, a alocação de
objetos é dinâmica, cresce à medida que novos objetos
são inseridos, diferentemente do vetor simples que
precisa de tamanho pré-determinado.
• O comportamento e os recursos da classe ArrayList são• O comportamento e os recursos da classe ArrayList são
semelhantes aos da classe Vector.
• A diferença entre Vector e ArrayList é que a primeira é
thread safe (controles sobre threads). Caso um objeto
não vá ser usado entre diferentes threads, a
implementação ArrayList tem operações mais rápidas.
Coleções Coleções -- ListasListas
• A LinkedList é uma implementação da interface List
como um lista encadeada (que é uma lista em que os
objetos estão interligados como referência entre eles).
Aplicavel para implementação de estruturas de dados
tais como pilhas, filas e árvores.
Coleções Coleções -- ConjuntosConjuntos
• Set é uma Collection que contém elementos únicos.
• A interface está implementada por meio das classes
HashSet e TreeSet.
• HashSet armazena seus objetos em uma tabela de
hash.
• TreeSet – armazena seus objetos em forma de árvore.• TreeSet – armazena seus objetos em forma de árvore.
• Considere usar um Set se não houver a necessidade
de guardar os elementos em determinada ordem e
buscá-los através de um índice. A pesquisa é bem mais
rápida.
Coleções Coleções -- MapeamentosMapeamentos
• Um mapa é muito usado para “indexar” objetos de
acordo com determinado critério, para podermos buscá-
los rapidamente através desse critério
• Maps associam chaves a valores e não podem conter
chaves duplicadas, isto é, cada chave pode mapear
somente um elemento.somente um elemento.
• Maps diferem de Sets no fato de que Maps contém
chaves e valores, ao passo que Sets contém somente
chaves.
Coleções Coleções -- MapeamentosMapeamentos
• As classes HashTable, HashMap e TreeMap
implementam a interface Map.
• HashMap e HashTable armazenam os objetos em
tabelas e TreeMaps armazenam os elementos em
árvores.
• HashTable e HashMap são bem similares, ficando a• HashTable e HashMap são bem similares, ficando a
diferença na questão de controle de Threads assim
como as implementações ArrayList e Vector.
Coleções Coleções -- IteratorIterator
• O Iterator está baseado no padrão de projeto Iterator,
que permite o acesso a objetos individuais de qualquer
estrutura de dados, sem conhecer o comportamento da
estrutura.
• As instruções para percorrer a estrutura de dados e
acessar seus elementos são armazenadas em umacessar seus elementos são armazenadas em um
objeto que se chama iterador.
• Cada estrutura de dados pode criar um iterador.
Coleções Coleções -- IteratorIterator
• Para navegar pelos objetos de uma coleção devemos
utilizar o Iterator.
• Os principais métodos:
– hasNext() - verifica se existem mais elementos.
– next() - recupera o próximo elemento.
– remove() - remove um elemento.– remove() - remove um elemento.
ArrayListArrayList
• A classe ArrayList é uma classe que permite a
implementação de uma lista de objetos na memória.
• Com já citado, a lista de objetos funciona na forma deum vetor dinâmico, ou seja, o vetor cresce à medida
que mais objetos são inseridos. A alocação de memória
é dinâmica.é dinâmica.
• Um ArrayList pode conter qualquer tipo de objeto. Um
ArrayList pode ser caracterizado para conter um único
tipo objeto
ArrayListArrayList
• Para criar um ArrayList, basta chamar o construtor:
ArrayList lista = new ArrayList();
• É sempre possível abstrair a lista a partir da interface 
List:List:
List lista = new ArrayList();
• A abstração do tipo de dado de lista pelo nome da
interface permite que você troque a implementação
ArrayList por outra implementação com a alteração
mínima do código.
ArrayListArrayList
Objeto lista
Produto prod = null;
List< Produto> lista = new ArrayList< Produto>();
prod = new Produto(45, “Mouse”, 50);
lista.add(prod);
prod = new Produto(15, “Placa Video”, 100);
lista.add(prod);
prod = new Produto(58, “Monitor 20p”, 40);
lista.add(prod);
32 Mouse 50
16 Placa Vídeo 100
58 Monitor 20p 40
Objeto lista
Indice 0
Atributo 
codigo
Atributo 
descrição
Atributo 
qtde
Indice 1
Indice 2
lista.size();
(3)
Objetos da 
classe Produto
ArrayList ArrayList –– manuseio de objetosmanuseio de objetos
• Embora na lista anterior tenhamos inserido apenas um
mesmo tipo de objeto, a implementação do ArrayList
trata-os com o objeto genérico.
• Podemos obter o tamanho da lista por meio de
lista.size().
• Para obter um objeto de dentro da lista podemos fazê-lo
por meio do método get, passando o índice
correspondente.
Produto p = (Produto) lista.get(1);
• Observe que mesmo sendo uma lista de mesmo tipo de
objeto, tivemos que fazer um casting para recuperar um
objeto da lista.
ArrayList ArrayList –– manuseio de objetosmanuseio de objetos
• É importante ressaltar que o método get apenas retorna
a referência de memória onde está armazenado o objeto
cujo índice na lista é 1.
• Para remover um objeto da lista você terá que chamar o
método remove na forma abaixo.
lista.remove(1);
• Considerando o exemplo da lista anterior, a nova lista
passa a ter apenas 2 elementos com os indices 0 e 1
apontando para os elementos restantes.
ArrayList ArrayList –– manuseio de objetosmanuseio de objetos
• Com a utilização do Iterator, temos o código abaixo.
ProdutoDAO dao = new ProdutoDAO();
List lista = dao.listaProdutosDAO();
Iterator iLista = lista.iterator();
while (iLista.hasNext()){
Produto prod = (Produto)iLista.next();
txtArea.append(prod.getDescricao()+"\n");
}
• O trecho de código considera que temos um método
que retorna uma lista de produtos. Dessa lista
utilizamos o método iterator que nos retorna uma
instância de Iterator. Observe o casting.
• Em seguida a descrição dos produtos são listadas numa
área de texto de uma janela Swing.
ArrayList ArrayList (Generics)(Generics)
• Geralmente, não nos interessa uma lista com vários
tipos de objetos misturados.
• Podemos usar o recurso de Generics para restringir as
listas a um determinado tipo de objetos (e não qualquer
Object).
• Podemos restringir a lista a ter apenas objetos da classe
Produto, conforme exemplo.
List<Produto> lista = new ArrayList<Produto>();
• Repare no uso de um parâmetro ao lado de List e
ArrayList: ele indica que nossa lista foi criada para
trabalhar exclusivamente com objetos do tipo Produto.
ArrayList ArrayList (Generics)(Generics)
• Com isso a recuperação de um objeto não precisa mais
passar pelo casting visto que o compilador já assumiu o
tipo de objeto da lista.
Produto p = lista.get(1);
• A recuperação em laço via Iterator fica agora na forma• A recuperação em laço via Iterator fica agora na forma
abaixo. Observe a tipagem também da classe Iterator.
ProdutoDAO dao = new ProdutoDAO();
List<Produto> lista = dao.listaProdutosDAO();
Iterator<Produto> iLista = lista.iterator();
while (iLista.hasNext()){
Produto prod = iLista.next();
txtArea.append(prod.getDescricao()+"\n");
}
Obtenção e Construção da ListaObtenção e Construção da Lista
• Com base nos exemplos anteriores e considerando que
a classe Dao faz o acesso aos dados, a obtenção dos
objetos da classe Produto e a construção da lista em
memória passa a ser feita pelo método
listaProdutosDAO da classe DAO.
• Todo o código do método é dado no slide seguinte.• Todo o código do método é dado no slide seguinte.
Obtenção e Construção da ListaObtenção e Construção da Lista
public List<Produto> listaProdutosDAO() throws Exception {
Produto produto = null;
List<Produto> listaProdutos = new ArrayList<Produto>();
try {
String sql = "SELECT * FROM TBProdutos";
Statement comandoSQL = conexao.createStatement();
ResultSet resultado = comandoSQL.executeQuery(sql);
while (resultado.next()) {
int cod = resultado.getInt("codigo");
String desc = resultado.getString("descricao");String desc = resultado.getString("descricao");
int qtde = resultado.getInt("qtde");
produto = new Produto(cod, desc, qtde);
listaProdutos.add(produto);
}
if (listaProdutos.isEmpty())
throw new Exception("Não há produto cadastrado");
else
return listaProdutos;
} finally {
conexao.close();
}
}
Apresentação dos dadosApresentação dos dados
• O código abaixo apresenta o uso de um for tradicional.
No entanto, observe o que foi dito sobre o uso do size e
get.
ProdutoDAO dao = new ProdutoDAO();
List<Produto> lista = dao.listaProdutosDAO();List<Produto> lista = dao.listaProdutosDAO();
for (int i = 0; i < lista.size(); i++){
Produto prod = lista.get(i);
txtArea.append(prod.getDescricao()+"\n");
}
Apresentação dos dadosApresentação dos dados
• Já o código abaixo apresenta uma forma alternativa do
uso do for para percorrer os dados da lista.
ProdutoDAO dao = new ProdutoDAO();
List<Produto> lista = dao.listaProdutosDAO();
for (Produto prod : lista)for (Produto prod : lista)
txtArea.append(prod.getDescricao()+"\n");

Outros materiais