SlideShare une entreprise Scribd logo
1  sur  31
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PR
Collections
Prof. Dr. Fernando Barreto
1Devair, Ricardo e Wellington
Seminário
Programação Orientada a Objetos
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PRCollections
• Escopo a ser tratado
Devair, Ricardo e Wellington 2
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PRCollections
• Escopo a ser tratado
– Definição
– Histórico de evolução
– Base de pesquisa
– Opções de uso
– Comparativo de performance
– Curiosidades
Devair, Ricardo e Wellington 3
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PR
Collections
Definição
• O que é?
– Um objeto que agrupa um conjunto de elementos para facilitar nosso trabalho
(estrutura de dados);
– São usadas para armazenar, recuperar e manipular dados.
– Tipicamente representam dados que possuem alguma relação em comum:
• Manipular um conjunto de alunos, um conjunto de jogadores...
– Em suma, é uma forma que temos de trabalhar com qualquer conjunto de
dados.
– Possui um conjunto de implementações (Interfaces e Classes) oferecidas pelo
pacote java.util;
Devair, Ricardo e Wellington 4
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PR
Collections
Definição
• Quais os benefícios em usar?
– Reduz esforço de programação;
• Algoritmos úteis já estão implementados (ordenação, pesquisa, inclusão...)
• Permite que concentremos esforços em itens importantes de nosso sistema;
– Aumenta a velocidade e qualidade da programação;
• As implementações já estão bem testadas garantindo qualidade e robustez;
• Existem implementações mais ágeis que outras, veremos a frente;
– Reduz esforços para aprender/conceber novas API´s;
• A forma como estão estruturadas, seguindo a implementação padrão da interface
Collection, permite maior facilidade de aprendizado e facilidade na criação de
novas implementações.
– Promove reuso de software
Devair, Ricardo e Wellington 5
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PR
Collections
Definição
• Base matemática
– Set (conjunto) – elementos sem repetição e sem ordem definida;
– Multiset (conjunto multiplo) – composição de elementos com possível
repetição e sem ordem definida;
– Sequência – conjunto de elementos cuja ordem importa;
• É para lidar com este tipo de problema que Collection existe!
Devair, Ricardo e Wellington 6
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PR
Collections
Definição
Prof. Ricardo F. P. Satin, MBA, PMP 7
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PRCollections
• Escopo a ser tratado
– Definição
– Histórico de evolução
– Base de pesquisa
– Opções de uso
– Comparativo de performance
– Curiosidades
Devair, Ricardo e Wellington 8
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PR
Collections
Histórico de evolução
• Collections foi inserido pela primeira vez no Java 2, em sua versão 1.2;
• Java Framework Collections
• Vector x Deque (Java 6)
– Vector – forma descontinuado
– Deque Combinação Fila e Pilha (usar um ou outro)
Devair, Ricardo e Wellington 9
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PRCollections
• Escopo a ser tratado
– Definição
– Histórico de evolução
– Base de pesquisa
– Opções de uso
– Comparativo de performance
– Curiosidades
Devair, Ricardo e Wellington 10
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PR
Collections
Base de pesquisa
• Documentação oficial Oracle/Java
– http://docs.oracle.com/javase/7/docs/technotes/guides/collections/index.html
– http://docs.oracle.com/javase/tutorial/collections/intro/index.html
– http://docs.oracle.com/javase/7/docs/technotes/guides/collections/reference.html
– http://docs.oracle.com/javase/7/docs/api/index.html
– http://docs.oracle.com/javase/7/docs/api/java/util/Map.html
– http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html
– http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html
• Caelum
– http://www.caelum.com.br/apostila-java-orientacao-objetos/collections-framework/#16-16-desafios
• JavaFree
– http://javafree.uol.com.br/artigo/847654/Collections-Framework.html#ixzz2R6o7HDTV
– http://www.easywayserver.com/blog/java-sortedset-example/
Devair, Ricardo e Wellington 11
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PRCollections
• Escopo a ser tratado
– Definição
– Histórico de evolução
– Base de pesquisa
– Opções de uso
– Comparativo de performance
– Curiosidades
Devair, Ricardo e Wellington 12
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PR
Collections
Opções de uso
• Set: Está diretamente relacionada com a ideia de conjuntos. Assim como
um conjunto, as classes que implementam esta interface não podem
conter elementos repetidos.
– HashSet: Implementação de Set que utiliza uma tabela hash (a implementação da Sun utiliza a
classe HashMap internamente) para guardar seus elementos. Não garante a ordem de
iteração, nem que a ordem permanecerá constante com o tempo (uma modificação da
coleção pode alterar a ordenação geral dos elementos). Por utilizar o algoritmo de tabela
hash, o acesso é rápido, tanto para leitura quanto para modificação.
– LinkedHashSet: Implementação de Set que estende HashSet, mas adiciona previsibilidade à
ordem de iteração sobre os elementos, isto é, uma iteração sobre seus elementos (utilizando
o Iterator) mantém a ordem de inserção (a inserção de elementos duplicados não altera a
ordem anterior). Internamente, é mantida uma lista duplamente encadeada que mantém esta
ordem. Por ter que manter uma lista paralelamente à tabela hash, a modificação deste tipo de
coleção acarreta em uma leve queda na performance em relação à HashSet, mas ainda é mais
rápida que uma TreeSet, que utiliza comparações para determinar a ordem dos elementos.
Devair, Ricardo e Wellington 13
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PR
Collections
Opções de uso
• Set
– SortedSet: Interface que estende Set, adicionando a semântica de ordenação natural dos
elementos. A posição dos elementos ao percorrer a coleção é determinado pelo retorno do
método compareTo(o), caso os elementos implementem a interface Comparable, ou do
método compare(o1, o2) de um objeto auxiliar que implemente a interface Comparator.
– TreeSet: Implementação de SortedSet que utiliza internamente uma TreeMap, que por sua vez
utiliza o algoritmo Red-Black para a ordenação da árvore de elementos. Isto garante a
ordenação ascendente da coleção, de acordo com a ordem natural dos elementos, definida
pela implementação da interface Comparable ou Comparator. Use esta classe quando precisar
de um conjunto (de elementos únicos) que deve estar sempre ordenado, mesmo sofrendo
modificações. Para casos onde a escrita é feita de uma só vez, antes da leitura dos
elementos, talvez seja mais vantajoso fazer a ordenação em uma List, seguida de uma cópia
para uma LinkedHashSet (dependendo do tamanho da coleção e do número de repetições de
elementos).
Devair, Ricardo e Wellington 14
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PR
Collections
Opções de uso
• List: Interface que extende Collection, e que define coleções ordenadas
(sequências), onde se tem o controle total sobre a posição de cada
elemento, identificado por um índice numérico. Na maioria dos
casos, pode ser encarado como um "array de tamanho variável"
pois, como os arrays primitivos, é acessível por índices, mas além disso
possui métodos de inserção e remoção;
– ArrayList: Implementação de List que utiliza internamente um array de objetos. Em uma
inserção onde o tamanho do array interno não é suficiente, um novo array é alocado (de
tamanho igual a 1.5 vezes o array original), e todo o conteúdo é copiado para o novo
array. Em uma inserção no meio da lista (índice < tamanho), o conteúdo posterior ao
índice é deslocado em uma posição. Esta implementação é a recomendada quando o
tamanho da lista é previsível (evitando realocações) e as operações de inserção e
remoção são feitas, em sua maioria, no fim da lista (evitando deslocamentos), ou
quando a lista é mais lida do que modificada (otimizado para leitura aleatória);
Devair, Ricardo e Wellington 15
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PR
Collections
Opções de uso
• List:
– LinkedList: Implementação de List que utiliza internamente uma lista
encadeada. A localização de um elemento na n-ésima posição é feita
percorrendo-se a lista da ponta mais próxima até o índice desejado. A inserção
é feita pela adição de novos nós, entre os nós adjacentes, sendo que antes é
necessária a localização desta posição. Esta implementação é recomendada
quando as modificações são feitas em sua maioria tanto no início quanto no
final da lista, e o percorrimento é feito de forma sequencial (via Iterator) ou
nas extremidades, e não aleatória (por índices). Um exemplo de uso é como
um fila (FIFO - First-In-First-Out), onde os elementos são retirados da lista na
mesma sequência em que são adicionados;
Devair, Ricardo e Wellington 16
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PR
Collections
Opções de uso
• List:
– Vector: Implementação de List com o mesmo comportamento da
ArrayList, porém, totalmente sincronizada. Por ter seus métodos
sincronizados, tem performance inferior ao de uma ArrayList, mas pode ser
utilizado em um ambiente multitarefa (acessado por várias threads) sem
perigo de perda da consistência de sua estrutura interna.
Em sistemas reais, essa sincronização acaba adicionando um overhead
desnecessário, pois mesmo quando há acesso multitarefa à lista (o que não
acontece na maioria das vezes), quase sempre é preciso fazer uma nova
sincronização nos métodos de negócio, para 'atomizarem' operações seguidas
sobre o Vector.
Devair, Ricardo e Wellington 17
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PR
Collections
Opções de uso
• Interface Map
– A interface Map, auxilia no trabalho com estruturas chave-valor.
– As chaves de um map devem ser únicas.
– Temos algumas implementações de uso geral
• HashMap
• TreeMap
• LinkedHashMap
Devair, Ricardo e Wellington 18
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PR
Collections
Opções de uso
• Interface Map
– HashMap
– Esta implementação oferece todas as operações de mapa comuns. Esta classe
não faz garantias quanto à ordem do mapa, em particular, não garante que a
ordem permanecerá constante ao longo do tempo.
– HashMap não possui ordenação, então os valores ficam todos sortidos na hora
da iteração.
– HashMap aceita como chave um valor nulo.
– LinkedHashMap
Devair, Ricardo e Wellington 19
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PR
Collections
Opções de uso
• Interface Map
– TreeMap
– A TreeMap utiliza o conceito de Árvore Rubro Negra. Pode se utilizar a
implementação da interface comparable no nomento da instanciação de um
TreeMap para controlar a ordenação. Esta implementação também oferece os
métodos básicos de inserção e remoção no mapa .
– TreeMap ordena os registros à medida em que são inseridos, ou seja, se
iterarmos esse mapa já receberemos todos os valores ordenados pela chave.
– TreeMap não aceita como chave um valor nulo.
Devair, Ricardo e Wellington 20
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PR
Collections
Opções de uso
• Classes Utilitárias
– Estas classes oferecem métodos estáticos para auxiliar o trabalho com coleções e
arrays(arranjos)
– Arrays
• Contém métodos estáticos para
classificar, pesquisar, comparar, copiar, redimensionar, conve
rter para String, e preencher arrays de primitivos e objetos.
• Os métodos dessa classe lançam uma
NullPointerException, se a referência matriz especificada for
nula.
• A documentação para os métodos contidos nesta classe
inclui descrição das implementações. Tais descrições devem
ser consideradas como notas de execução, em vez de partes
da especificação. Os programadores devem se sentir livres
para substituir outros algoritmos, desde que a especificação
em si seja respeitada.
Devair, Ricardo e Wellington 21
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PR
Collections
Opções de uso
• Classes Utilitárias
– Estas classes oferecem métodos estáticos para auxiliar o trabalho com coleções e
arrays(arranjos)
– Collections
• Esta classe é composta exclusivamente de métodos estáticos que operam ou retornam
coleções. Ela contém algoritmos polimórficos que operam em coleções,e ou retornam uma
nova coleção .
• Os métodos desta classe lançam uma NullPointerException se as coleções ou objetos de classe
que lhes são prestados forem nulos.
Devair, Ricardo e Wellington 22
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PR
Collections
Opções de uso
• Interfaces Auxiliares
– Iterator
• É uma boa alternativa para iteração com estrutura de dados;
• Define as operações básicas para o percorrimento dos elementos da coleção.
• Utiliza o pattern de mesmo nome (Iterator, GoF), desacoplando o código que utiliza as coleções
de suas estruturas internas.
• É possível remover elementos da coleção original utilizando o método remove(), que remove o
elemento atual da iteração, mas esta operação é de implementação opcional, e uma
UnsupportedOperationException será lançada caso esta não esteja disponível.
Map mapa = new HashMap();
terator itChaves = mapa.keySet().iterator();
while (itChaves.hasNext()) {
Object chave = itChaves.next();
Object valor = mapa.get(chave);
System.out.println(chave + " = " + valor);
}
Devair, Ricardo e Wellington 23
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PR
Collections
Opções de uso
• Interfaces Auxiliares
– ListIterator
– Comparable
– Comparator
– Enumeration
– RandonAcces
Devair, Ricardo e Wellington 24
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PRCollections
• Escopo a ser tratado
– Definição
– Histórico de evolução
– Base de pesquisa
– Opções de uso
– Comparativo de performance
– Curiosidades
Devair, Ricardo e Wellington 25
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PR
Collections
Comparativo de Performance
• http://scrtchpad.files.wordpress.com/2008/10/java-collections-
performance-evaluation.pdf
• Vector x concorrência
Devair, Ricardo e Wellington 26
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PRCollections
• Escopo a ser tratado
– Definição
– Histórico de evolução
– Base de pesquisa
– Opções de uso
– Comparativo de performance
– Curiosidades
Devair, Ricardo e Wellington 27
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PR
Collections
Curiosisade
• API´s alternativas ao collection
– Guava
• Agora engloba o Google Collections
• http://code.google.com/p/guava-libraries/
– Apache
• http://commons.apache.org/proper/commons-collections/
• Curiosidades / recursos
– Fila, Pilha, Sort
Devair, Ricardo e Wellington 28
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PR
Collections
Ainda com dúvidas sobre qual usar?
Devair, Ricardo e Wellington29Fonte: https://fernandofranzini.files.wordpress.com/2012/06/collections.png
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PR
Collections
Complemento
Devair, Ricardo e Wellington30Fonte: http://www.janeve.me/articles/which-java-collection-to-use
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ
PRDúvidas ?
• Disciplina de Programação Orientada a Objetos
– Prof. Dr. Fernando Barreto
– Mestrandos:
• Devair, Ricardo, Wellington
Devair, Ricardo e Wellington 31

Contenu connexe

En vedette

"Streamizando" com sucesso
"Streamizando" com sucesso"Streamizando" com sucesso
"Streamizando" com sucessoBruno Oliveira
 
JavaFX 8, Collections e Lambdas
JavaFX 8, Collections e LambdasJavaFX 8, Collections e Lambdas
JavaFX 8, Collections e LambdasjesuinoPower
 
[Curso Java Basico] Exercicios Aulas 47 a 52
[Curso Java Basico] Exercicios Aulas 47 a 52[Curso Java Basico] Exercicios Aulas 47 a 52
[Curso Java Basico] Exercicios Aulas 47 a 52Loiane Groner
 
Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)
Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)
Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)Loiane Groner
 
Estrutura de Dados e Algoritmos com Java #01: Introducao
Estrutura de Dados e Algoritmos com Java #01: IntroducaoEstrutura de Dados e Algoritmos com Java #01: Introducao
Estrutura de Dados e Algoritmos com Java #01: IntroducaoLoiane Groner
 
Introducao ao Ionic 2 na pratica
Introducao ao Ionic 2 na praticaIntroducao ao Ionic 2 na pratica
Introducao ao Ionic 2 na praticaLoiane Groner
 

En vedette (6)

"Streamizando" com sucesso
"Streamizando" com sucesso"Streamizando" com sucesso
"Streamizando" com sucesso
 
JavaFX 8, Collections e Lambdas
JavaFX 8, Collections e LambdasJavaFX 8, Collections e Lambdas
JavaFX 8, Collections e Lambdas
 
[Curso Java Basico] Exercicios Aulas 47 a 52
[Curso Java Basico] Exercicios Aulas 47 a 52[Curso Java Basico] Exercicios Aulas 47 a 52
[Curso Java Basico] Exercicios Aulas 47 a 52
 
Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)
Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)
Estrutura de Dados e Algoritmos com Java #13-18: Pilhas (Stack)
 
Estrutura de Dados e Algoritmos com Java #01: Introducao
Estrutura de Dados e Algoritmos com Java #01: IntroducaoEstrutura de Dados e Algoritmos com Java #01: Introducao
Estrutura de Dados e Algoritmos com Java #01: Introducao
 
Introducao ao Ionic 2 na pratica
Introducao ao Ionic 2 na praticaIntroducao ao Ionic 2 na pratica
Introducao ao Ionic 2 na pratica
 

Similaire à Seminário - Java Collections

Similaire à Seminário - Java Collections (20)

Classes e Estrutura de Dados
Classes e Estrutura de DadosClasses e Estrutura de Dados
Classes e Estrutura de Dados
 
Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections
 
Slide Semana2 Rodrigo
Slide Semana2 RodrigoSlide Semana2 Rodrigo
Slide Semana2 Rodrigo
 
Slide Share s2 Rodd
Slide Share s2 RoddSlide Share s2 Rodd
Slide Share s2 Rodd
 
Slide Semana2 Rodrigo2
Slide Semana2 Rodrigo2Slide Semana2 Rodrigo2
Slide Semana2 Rodrigo2
 
Java: Collections
Java: CollectionsJava: Collections
Java: Collections
 
HashSet, TreeSet, LinkedHashSet em Java
HashSet, TreeSet, LinkedHashSet em JavaHashSet, TreeSet, LinkedHashSet em Java
HashSet, TreeSet, LinkedHashSet em Java
 
Collections Java
Collections JavaCollections Java
Collections Java
 
Java: strings e arrays
Java: strings e arraysJava: strings e arrays
Java: strings e arrays
 
Mapeamento Objeto-Relacional com LINQ
Mapeamento Objeto-Relacional com LINQ Mapeamento Objeto-Relacional com LINQ
Mapeamento Objeto-Relacional com LINQ
 
Resumão java
Resumão javaResumão java
Resumão java
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Csharp fundamentals
Csharp fundamentalsCsharp fundamentals
Csharp fundamentals
 
Mapeamento de herança OR
Mapeamento de herança ORMapeamento de herança OR
Mapeamento de herança OR
 
Poo padadigmas
Poo padadigmasPoo padadigmas
Poo padadigmas
 
8 collections-i
8 collections-i8 collections-i
8 collections-i
 
Aula05
Aula05Aula05
Aula05
 
Curso Java Básico - Aula 05
Curso Java Básico - Aula 05Curso Java Básico - Aula 05
Curso Java Básico - Aula 05
 
Java Collections - Tomaz Lavieri
Java Collections - Tomaz LavieriJava Collections - Tomaz Lavieri
Java Collections - Tomaz Lavieri
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 

Plus de Ricardo Satin, MSc, ITIL, CSM, PMP (17)

Apresentação ricardo satin
Apresentação ricardo satinApresentação ricardo satin
Apresentação ricardo satin
 
Soft Skills
Soft SkillsSoft Skills
Soft Skills
 
Engenharia de requisitos 5/5
Engenharia de requisitos 5/5Engenharia de requisitos 5/5
Engenharia de requisitos 5/5
 
Engenharia de requisitos 3/5
Engenharia de requisitos 3/5Engenharia de requisitos 3/5
Engenharia de requisitos 3/5
 
Engenharia de requisitos 4/5
Engenharia de requisitos 4/5Engenharia de requisitos 4/5
Engenharia de requisitos 4/5
 
Engenharia de requisitos 2/5
Engenharia de requisitos 2/5Engenharia de requisitos 2/5
Engenharia de requisitos 2/5
 
Engenharia de requisitos 1/5
Engenharia de requisitos 1/5Engenharia de requisitos 1/5
Engenharia de requisitos 1/5
 
Gp g riscos
Gp   g riscosGp   g riscos
Gp g riscos
 
Planejamento de segurança em t.i.
Planejamento de segurança em t.i.Planejamento de segurança em t.i.
Planejamento de segurança em t.i.
 
Gerenciamento do escopo
Gerenciamento do escopoGerenciamento do escopo
Gerenciamento do escopo
 
Reunião de Progresso
Reunião de ProgressoReunião de Progresso
Reunião de Progresso
 
Plano de Projetos
Plano de ProjetosPlano de Projetos
Plano de Projetos
 
Plano de Projeto
Plano de ProjetoPlano de Projeto
Plano de Projeto
 
Project charter
Project charterProject charter
Project charter
 
Kickoff Meeting
Kickoff MeetingKickoff Meeting
Kickoff Meeting
 
Gerenciamento de integração
Gerenciamento de integraçãoGerenciamento de integração
Gerenciamento de integração
 
O Papel do Contador na éra do SPED
O Papel do Contador na éra do SPEDO Papel do Contador na éra do SPED
O Papel do Contador na éra do SPED
 

Seminário - Java Collections

  • 1. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PR Collections Prof. Dr. Fernando Barreto 1Devair, Ricardo e Wellington Seminário Programação Orientada a Objetos
  • 2. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PRCollections • Escopo a ser tratado Devair, Ricardo e Wellington 2
  • 3. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PRCollections • Escopo a ser tratado – Definição – Histórico de evolução – Base de pesquisa – Opções de uso – Comparativo de performance – Curiosidades Devair, Ricardo e Wellington 3
  • 4. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PR Collections Definição • O que é? – Um objeto que agrupa um conjunto de elementos para facilitar nosso trabalho (estrutura de dados); – São usadas para armazenar, recuperar e manipular dados. – Tipicamente representam dados que possuem alguma relação em comum: • Manipular um conjunto de alunos, um conjunto de jogadores... – Em suma, é uma forma que temos de trabalhar com qualquer conjunto de dados. – Possui um conjunto de implementações (Interfaces e Classes) oferecidas pelo pacote java.util; Devair, Ricardo e Wellington 4
  • 5. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PR Collections Definição • Quais os benefícios em usar? – Reduz esforço de programação; • Algoritmos úteis já estão implementados (ordenação, pesquisa, inclusão...) • Permite que concentremos esforços em itens importantes de nosso sistema; – Aumenta a velocidade e qualidade da programação; • As implementações já estão bem testadas garantindo qualidade e robustez; • Existem implementações mais ágeis que outras, veremos a frente; – Reduz esforços para aprender/conceber novas API´s; • A forma como estão estruturadas, seguindo a implementação padrão da interface Collection, permite maior facilidade de aprendizado e facilidade na criação de novas implementações. – Promove reuso de software Devair, Ricardo e Wellington 5
  • 6. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PR Collections Definição • Base matemática – Set (conjunto) – elementos sem repetição e sem ordem definida; – Multiset (conjunto multiplo) – composição de elementos com possível repetição e sem ordem definida; – Sequência – conjunto de elementos cuja ordem importa; • É para lidar com este tipo de problema que Collection existe! Devair, Ricardo e Wellington 6
  • 7. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PR Collections Definição Prof. Ricardo F. P. Satin, MBA, PMP 7
  • 8. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PRCollections • Escopo a ser tratado – Definição – Histórico de evolução – Base de pesquisa – Opções de uso – Comparativo de performance – Curiosidades Devair, Ricardo e Wellington 8
  • 9. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PR Collections Histórico de evolução • Collections foi inserido pela primeira vez no Java 2, em sua versão 1.2; • Java Framework Collections • Vector x Deque (Java 6) – Vector – forma descontinuado – Deque Combinação Fila e Pilha (usar um ou outro) Devair, Ricardo e Wellington 9
  • 10. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PRCollections • Escopo a ser tratado – Definição – Histórico de evolução – Base de pesquisa – Opções de uso – Comparativo de performance – Curiosidades Devair, Ricardo e Wellington 10
  • 11. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PR Collections Base de pesquisa • Documentação oficial Oracle/Java – http://docs.oracle.com/javase/7/docs/technotes/guides/collections/index.html – http://docs.oracle.com/javase/tutorial/collections/intro/index.html – http://docs.oracle.com/javase/7/docs/technotes/guides/collections/reference.html – http://docs.oracle.com/javase/7/docs/api/index.html – http://docs.oracle.com/javase/7/docs/api/java/util/Map.html – http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html – http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html • Caelum – http://www.caelum.com.br/apostila-java-orientacao-objetos/collections-framework/#16-16-desafios • JavaFree – http://javafree.uol.com.br/artigo/847654/Collections-Framework.html#ixzz2R6o7HDTV – http://www.easywayserver.com/blog/java-sortedset-example/ Devair, Ricardo e Wellington 11
  • 12. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PRCollections • Escopo a ser tratado – Definição – Histórico de evolução – Base de pesquisa – Opções de uso – Comparativo de performance – Curiosidades Devair, Ricardo e Wellington 12
  • 13. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PR Collections Opções de uso • Set: Está diretamente relacionada com a ideia de conjuntos. Assim como um conjunto, as classes que implementam esta interface não podem conter elementos repetidos. – HashSet: Implementação de Set que utiliza uma tabela hash (a implementação da Sun utiliza a classe HashMap internamente) para guardar seus elementos. Não garante a ordem de iteração, nem que a ordem permanecerá constante com o tempo (uma modificação da coleção pode alterar a ordenação geral dos elementos). Por utilizar o algoritmo de tabela hash, o acesso é rápido, tanto para leitura quanto para modificação. – LinkedHashSet: Implementação de Set que estende HashSet, mas adiciona previsibilidade à ordem de iteração sobre os elementos, isto é, uma iteração sobre seus elementos (utilizando o Iterator) mantém a ordem de inserção (a inserção de elementos duplicados não altera a ordem anterior). Internamente, é mantida uma lista duplamente encadeada que mantém esta ordem. Por ter que manter uma lista paralelamente à tabela hash, a modificação deste tipo de coleção acarreta em uma leve queda na performance em relação à HashSet, mas ainda é mais rápida que uma TreeSet, que utiliza comparações para determinar a ordem dos elementos. Devair, Ricardo e Wellington 13
  • 14. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PR Collections Opções de uso • Set – SortedSet: Interface que estende Set, adicionando a semântica de ordenação natural dos elementos. A posição dos elementos ao percorrer a coleção é determinado pelo retorno do método compareTo(o), caso os elementos implementem a interface Comparable, ou do método compare(o1, o2) de um objeto auxiliar que implemente a interface Comparator. – TreeSet: Implementação de SortedSet que utiliza internamente uma TreeMap, que por sua vez utiliza o algoritmo Red-Black para a ordenação da árvore de elementos. Isto garante a ordenação ascendente da coleção, de acordo com a ordem natural dos elementos, definida pela implementação da interface Comparable ou Comparator. Use esta classe quando precisar de um conjunto (de elementos únicos) que deve estar sempre ordenado, mesmo sofrendo modificações. Para casos onde a escrita é feita de uma só vez, antes da leitura dos elementos, talvez seja mais vantajoso fazer a ordenação em uma List, seguida de uma cópia para uma LinkedHashSet (dependendo do tamanho da coleção e do número de repetições de elementos). Devair, Ricardo e Wellington 14
  • 15. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PR Collections Opções de uso • List: Interface que extende Collection, e que define coleções ordenadas (sequências), onde se tem o controle total sobre a posição de cada elemento, identificado por um índice numérico. Na maioria dos casos, pode ser encarado como um "array de tamanho variável" pois, como os arrays primitivos, é acessível por índices, mas além disso possui métodos de inserção e remoção; – ArrayList: Implementação de List que utiliza internamente um array de objetos. Em uma inserção onde o tamanho do array interno não é suficiente, um novo array é alocado (de tamanho igual a 1.5 vezes o array original), e todo o conteúdo é copiado para o novo array. Em uma inserção no meio da lista (índice < tamanho), o conteúdo posterior ao índice é deslocado em uma posição. Esta implementação é a recomendada quando o tamanho da lista é previsível (evitando realocações) e as operações de inserção e remoção são feitas, em sua maioria, no fim da lista (evitando deslocamentos), ou quando a lista é mais lida do que modificada (otimizado para leitura aleatória); Devair, Ricardo e Wellington 15
  • 16. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PR Collections Opções de uso • List: – LinkedList: Implementação de List que utiliza internamente uma lista encadeada. A localização de um elemento na n-ésima posição é feita percorrendo-se a lista da ponta mais próxima até o índice desejado. A inserção é feita pela adição de novos nós, entre os nós adjacentes, sendo que antes é necessária a localização desta posição. Esta implementação é recomendada quando as modificações são feitas em sua maioria tanto no início quanto no final da lista, e o percorrimento é feito de forma sequencial (via Iterator) ou nas extremidades, e não aleatória (por índices). Um exemplo de uso é como um fila (FIFO - First-In-First-Out), onde os elementos são retirados da lista na mesma sequência em que são adicionados; Devair, Ricardo e Wellington 16
  • 17. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PR Collections Opções de uso • List: – Vector: Implementação de List com o mesmo comportamento da ArrayList, porém, totalmente sincronizada. Por ter seus métodos sincronizados, tem performance inferior ao de uma ArrayList, mas pode ser utilizado em um ambiente multitarefa (acessado por várias threads) sem perigo de perda da consistência de sua estrutura interna. Em sistemas reais, essa sincronização acaba adicionando um overhead desnecessário, pois mesmo quando há acesso multitarefa à lista (o que não acontece na maioria das vezes), quase sempre é preciso fazer uma nova sincronização nos métodos de negócio, para 'atomizarem' operações seguidas sobre o Vector. Devair, Ricardo e Wellington 17
  • 18. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PR Collections Opções de uso • Interface Map – A interface Map, auxilia no trabalho com estruturas chave-valor. – As chaves de um map devem ser únicas. – Temos algumas implementações de uso geral • HashMap • TreeMap • LinkedHashMap Devair, Ricardo e Wellington 18
  • 19. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PR Collections Opções de uso • Interface Map – HashMap – Esta implementação oferece todas as operações de mapa comuns. Esta classe não faz garantias quanto à ordem do mapa, em particular, não garante que a ordem permanecerá constante ao longo do tempo. – HashMap não possui ordenação, então os valores ficam todos sortidos na hora da iteração. – HashMap aceita como chave um valor nulo. – LinkedHashMap Devair, Ricardo e Wellington 19
  • 20. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PR Collections Opções de uso • Interface Map – TreeMap – A TreeMap utiliza o conceito de Árvore Rubro Negra. Pode se utilizar a implementação da interface comparable no nomento da instanciação de um TreeMap para controlar a ordenação. Esta implementação também oferece os métodos básicos de inserção e remoção no mapa . – TreeMap ordena os registros à medida em que são inseridos, ou seja, se iterarmos esse mapa já receberemos todos os valores ordenados pela chave. – TreeMap não aceita como chave um valor nulo. Devair, Ricardo e Wellington 20
  • 21. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PR Collections Opções de uso • Classes Utilitárias – Estas classes oferecem métodos estáticos para auxiliar o trabalho com coleções e arrays(arranjos) – Arrays • Contém métodos estáticos para classificar, pesquisar, comparar, copiar, redimensionar, conve rter para String, e preencher arrays de primitivos e objetos. • Os métodos dessa classe lançam uma NullPointerException, se a referência matriz especificada for nula. • A documentação para os métodos contidos nesta classe inclui descrição das implementações. Tais descrições devem ser consideradas como notas de execução, em vez de partes da especificação. Os programadores devem se sentir livres para substituir outros algoritmos, desde que a especificação em si seja respeitada. Devair, Ricardo e Wellington 21
  • 22. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PR Collections Opções de uso • Classes Utilitárias – Estas classes oferecem métodos estáticos para auxiliar o trabalho com coleções e arrays(arranjos) – Collections • Esta classe é composta exclusivamente de métodos estáticos que operam ou retornam coleções. Ela contém algoritmos polimórficos que operam em coleções,e ou retornam uma nova coleção . • Os métodos desta classe lançam uma NullPointerException se as coleções ou objetos de classe que lhes são prestados forem nulos. Devair, Ricardo e Wellington 22
  • 23. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PR Collections Opções de uso • Interfaces Auxiliares – Iterator • É uma boa alternativa para iteração com estrutura de dados; • Define as operações básicas para o percorrimento dos elementos da coleção. • Utiliza o pattern de mesmo nome (Iterator, GoF), desacoplando o código que utiliza as coleções de suas estruturas internas. • É possível remover elementos da coleção original utilizando o método remove(), que remove o elemento atual da iteração, mas esta operação é de implementação opcional, e uma UnsupportedOperationException será lançada caso esta não esteja disponível. Map mapa = new HashMap(); terator itChaves = mapa.keySet().iterator(); while (itChaves.hasNext()) { Object chave = itChaves.next(); Object valor = mapa.get(chave); System.out.println(chave + " = " + valor); } Devair, Ricardo e Wellington 23
  • 24. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PR Collections Opções de uso • Interfaces Auxiliares – ListIterator – Comparable – Comparator – Enumeration – RandonAcces Devair, Ricardo e Wellington 24
  • 25. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PRCollections • Escopo a ser tratado – Definição – Histórico de evolução – Base de pesquisa – Opções de uso – Comparativo de performance – Curiosidades Devair, Ricardo e Wellington 25
  • 26. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PR Collections Comparativo de Performance • http://scrtchpad.files.wordpress.com/2008/10/java-collections- performance-evaluation.pdf • Vector x concorrência Devair, Ricardo e Wellington 26
  • 27. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PRCollections • Escopo a ser tratado – Definição – Histórico de evolução – Base de pesquisa – Opções de uso – Comparativo de performance – Curiosidades Devair, Ricardo e Wellington 27
  • 28. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PR Collections Curiosisade • API´s alternativas ao collection – Guava • Agora engloba o Google Collections • http://code.google.com/p/guava-libraries/ – Apache • http://commons.apache.org/proper/commons-collections/ • Curiosidades / recursos – Fila, Pilha, Sort Devair, Ricardo e Wellington 28
  • 29. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PR Collections Ainda com dúvidas sobre qual usar? Devair, Ricardo e Wellington29Fonte: https://fernandofranzini.files.wordpress.com/2012/06/collections.png
  • 30. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PR Collections Complemento Devair, Ricardo e Wellington30Fonte: http://www.janeve.me/articles/which-java-collection-to-use
  • 31. UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PRDúvidas ? • Disciplina de Programação Orientada a Objetos – Prof. Dr. Fernando Barreto – Mestrandos: • Devair, Ricardo, Wellington Devair, Ricardo e Wellington 31