SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
http://publicationslist.org/junio
Java Collections
Prof. Jose Fernando Rodrigues Junior
http://www.icmc.usp.br/~junio
junio@icmc.usp.br
INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO
- USP -
SCC0504 - Programação
Orientada a Objetos
http://publicationslist.org/junio
Introdução
 Set (conjunto): composição elementos sem repetição e sem
ordem definida. Exemplo:
 A = {banana, maçã, abacate}
 Multiset (multi-conjunto): composição de elementos
possivelmente com repetição e sem ordem definida.
Exemplo:
 A = {banana, maçã, abacate, banana}
Também denominado: list (lista), grupo (bunch), bag (saco, sacola),
heap (monte), sample (amostra), suite (jogo de) e collection
(coleção)
 Sequência: conjunto de elementos cuja ordem importa.
Exemplo: {banana, maçã, abacate} ≠ {maçã, banana, abacate}
http://publicationslist.org/junio
Introdução
 Set (conjunto): composição elementos sem repetição e sem
ordem definida. Exemplo:
 A = {banana, maçã, abacate}
 Multiset (multi-conjunto): composição de elementos
possivelmente com repetição e sem ordem definida.
Exemplo:
 A = {banana, maçã, abacate, banana}
Também denominado: list (lista), grupo (bunch), bag (saco sacola),
heap (monte), sample (amostra), suite (jogo de) e collection
(coleção)
 Sequência: conjunto de elementos cuja ordem importa.
Exemplo: {banana, maçã, abacate} ≠ {maçã, banana, abacate}
Em computação, pela própria definição baseada na
máquina de Turing, conjuntos e multiconjuntos
possuem alguma ordem – pois estão em memória.
Essa ordem pode ser considerada (definindo-se uma
sequência) ou não.
http://publicationslist.org/junio
Introdução
 Conjuntos, multiconjuntos e sequências são
alguns dos principais conceitos de toda a
matemática, ciência da computação e mesmo
cognição humana
 Tratam-se de conceitos abstratos (em contraste a
conceitos concretos, como um carro por exemplo)
 Em muitos contextos, por praticidade, o termo
Collection se refere de maneira geral a conjuntos,
multiconjuntos e sequências (ordered collections)
http://publicationslist.org/junio
Collections básicas
http://publicationslist.org/junio
A interface Collection
 Collections em Java começam pela interface de
mesmo nome – e são genéricas!
public interface Collection<E> extends Iterable<E> {
// Basic operations
int size();
boolean isEmpty();
boolean contains(Object element);
boolean add(E element); //optional
boolean remove(Object element); //optional
Iterator<E> iterator();
// Bulk operations
boolean containsAll(Collection<?> c);
boolean addAll(Collection<? extends E> c); //optional
boolean removeAll(Collection<?> c); //optional
boolean retainAll(Collection<?> c); //optional
void clear(); //optional
// Array operations
Object[] toArray();
<T> T[] toArray(T[] a);
}
As operações da interface
Collection são as operações
comuns a conjuntos, multi-
conjuntos e sequências.
http://publicationslist.org/junio
Iteradores
 A idéia de coleções que se baseiam em uma interface raíz
e que são genéricas traz dois problemas:
1) a maneira como se percorre os elementos da coleção;
por exemplo, percorrer um ArrayList (por índice) é
diferente de se percorrer um LinkedList (por
encadeamento)
2) não se sabe com antescedência qual o tipo
armazenado na coleção, portanto, ponteiros e
aritmética de ponteiros não é possível
 Solução: iteradores
 Iteradores abstraem como e o quê está sendo percorrido
em uma coleção, permitindo a escrita de código mais
geral (que possui por baixo código mais específico)
http://publicationslist.org/junio
Iteradores
 A idéia de coleções que se baseiam em uma interface raíz
e que são genéricas traz dois problemas:
1) a maneira como se percorre os elementos da coleção;
por exemplo, percorrer um ArrayList (por índice) é
diferente de se percorrer um LinkedList (por
encadeamento)
2) não se sabe com antescedência qual o tipo
armazenado na coleção, portanto, ponteiros e
aritmética de ponteiros não é possível
 Solução: iteradores
 Iteradores abstraem como e o quê está sendo percorrido
em uma coleção, permitindo a escrita de código mais
geral (que possui por baixo código mais específico)
A solução é ter a interface Iterable<E> como
superinterface da interface Collection <E>:
interface Collection <E> extends Iterable<E>
O quê requer os seguintes métodos:
• boolean hasNext();
• E next();
• void remove();
http://publicationslist.org/junio
Iteradores
A interface Iterator <E>:
 boolean hasNext()
Returns true if the iteration has more elements.
 E next()
Returns the next element in the iteration.
 void remove()
Removes from the underlying collection the last element
returned by the iterator (optional operation).
Esses três métodos devem ser implementados para se
definir o iterador de uma coleção genérica. Mas já
estão disponíveis em um monte de coleções do Java.
http://publicationslist.org/junio
Arrays e listas dinâmicas
 Arrays (arranjos) e linked lists (listas
encadeadas) são as estruturas mais usadas para
problemas de collections – elas permitem que se
tenha conjuntos, multiconjuntos e sequências
em memória
 Exemplo NetBeans  ListTest
 Quando usar ArrayList e quando usar LinkedList?
 ArrayList: quando se têm muito acesso aleatório (acessos
não sequenciais), o que é eficiente por meio de índice de
array abstraído pelo iterador, e pouca edição (add e remove)
 LinkedList: quando se tem muita edição (add e remove) e
acesso sequencial dos elementos da lista
http://publicationslist.org/junio
Arrays e listas dinâmicas
 Alguns collections muito conhecidos são as
estruturas de dados Pilha e Fila
 Qual é a relação entre arrays, linked lists, pilhas e
filas?
 Arrays e linked lists são apenas conjuntos de dados (ou
coleções)
 Pilhas e filas são conjuntos (ou coleções) com restrições
de acesso
 Portanto:
 Um array pode ser uma pilha ou uma fila
 Um linked list pode ser uma pilha ou uma fila
 Tanto arrays como linked lists são listas (ou conjuntos, ou coleções)
 Um array não pode ser um linked list, e vice versa
 Uma pilha não pode ser uma fila, e vice versa
 Todos são coleções
http://publicationslist.org/junio
Arrays e listas dinâmicas
 Alguns collections muito conhecidos são as
estruturas de dados Pilha e Fila
 Qual é a relação entre arrays, linked lists, pilhas e
filas?
 Arrays e linked lists são apenas conjuntos de dados (ou
coleções)
 Pilhas e filas são conjuntos (ou coleções) com restrições
de acesso
 Portanto:
 Um array pode ser uma pilha ou uma fila
 Um linked list pode ser uma pilha ou uma fila
 Tanto arrays como linked lists são listas (ou conjuntos, ou coleções)
 Um array não pode ser um linked list, e vice versa
 Uma pilha não pode ser uma fila, e vice versa
 Todos são coleções
Estes e outros fatos se refletem na definição e no uso
das coleções do Java.
http://publicationslist.org/junio
Queue (Fila)
 Fila: trata-se de uma coleção na qual a entrada só
ocorre de um lado e a saída só ocorre do lado
oposto – FIFO, portanto
Fila
EntradaSaída
http://publicationslist.org/junio
Stack (Pilha)
 Pilha: uma coleção na qual a entrada e a saída
só ocorrem do mesmo lado – LIFO, portanto
Pilha
Entrada
Saída
http://publicationslist.org/junio
ArrayDeque
 Array que aceita operações de inserção e
remoção em ambas as extremidades
 Portanto, um ArrayDeque pode ser:
 uma fila sobre um array: métodos add e remove
 uma pilha sobre um array: métodos push e pop
 Exemplo NetBeans  QueueStackArrayTest
Deque
Entrada
Saída
Entrada
Saída
http://publicationslist.org/junio
LiskedList
 Da mesma maneira, um linked list aceita
naturalmente operações de adição e remoção em
ambas as extremidades
 Portanto, uma LinkedList pode ser:
 uma fila sobre uma lista encadeada: métodos add e
remove
 uma pilha sobre sobre uma lista encadeada: métodos
push e pop
 Exemplo NetBeans  QueueStackLinkedListTest
http://publicationslist.org/junio
LiskedList
 Da mesma maneira, um linked list aceita
naturalmente operações de adição e remoção em
ambas as extremidades
 Portanto, uma LinledList pode ser:
 uma fila sobre uma lista encadeada: métodos add e
remove
 uma pilha sobre sobre uma lista encadeada: métodos
push e pop
 Exemplo NetBeans
As diferentes possibilidades de implementação dependem das
características de cada aplicação. A documentação da classe
ArrayDeque adverte que:
“This class is likely to be faster than Stack when used as a stack,
and faster than LinkedList when used as a queue.”
(http://download.oracle.com/javase/6/docs/api/)
Já a mais específica classe Stack adverte que:
“A more complete and consistent set of LIFO stack operations
is provided by the Deque interface and its implementations,
which should be used in preference to this class.”
(http://download.oracle.com/javase/6/docs/api/)
Outras soluções da API: vector, arrays, stack, diversas variações de
queue e de lista, entre outras.
http://publicationslist.org/junio
Sorting
 Como já mencionado em outra aula, a ordenação de coleções (listas)
depende da definição de uma relação de ordem total entre seus
elementos
 Isso é possível usando-se a interface Comparable:
public interface Comparable<T> {
public int compareTo(T o);
}
 Uma vez implementada, pode-se ordenar uma dada coleção
chamando-se o método estático
public static void sort(List<T> list)
http://publicationslist.org/junio
Sorting
 Os tipos primitivos do Java implementam a interface Comparable em
suas respectivas classes de boxing.
http://publicationslist.org/junio
Sorting
 Suponha o seguinte problema: você está usando objetos de uma
classe da qual você não tem acesso ao código fonte, e esta
classe não implementa a interface Comparable ou implementa
diferentemente do que você deseja.
 Se você quiser ordenar uma lista com os objetos desta classe, como
fazer?
 Para este problema, o Java oferece uma alternativa, a interface Comparator
public interface Comparator<T> {
int compare(T o1, T o2);
}
 Torna-se possível a definição de comparadores de objetos ao
invés de objetos que são comparáveis entre si.
public static void sort(List<T> list, Comparator<T> c)
 Exemplo NetBeans  ComparatorTest e ListTest
http://publicationslist.org/junio
Até aqui
Listas (“conjuntos” COM repetição)
e SEM restrições (acesso e remoção
em posições aleatórias)
• Array: ArrayList<E>
• Lista encadeada: LinkedList<E>
Listas (“conjuntos” COM repetição)
e COM restrições (acesso e remoção
apenas nas extremidades)
• Array: ArrayDeque
• Lista encadeada:
LinkedList<E>
• class Stack<E>: pilha
• interface Queue<E>: fila
• Pilha: push/pop
• Fila: add/remove
• Pilha: push/pop
• Fila: add/remove
Sets (conjuntos SEM repetição) Próximos slides
http://publicationslist.org/junio
Sets
http://publicationslist.org/junio
Set
 A interface Set descende de Collection
public interface Set<E> extends Collection<E>
 Trata-se de um conjunto, matematicamente falando, sem
repetição e sem ordem
 Interface base para coleções que NÃO permitem repetição de elementos
 Não pode haver dois elementos e1 e e2 tais que e1.equals(e2)
 Não pode haver dois elementos com valor null
http://publicationslist.org/junio
Implementações de Set
 Existem três implementações diferentes, todas servem para o mesmo fim,
mas com desempenho e requisitos diferentes:
 HashSet: usa um hash para oferecer tempo constante, idealmente O(1),
para operações (add, remove, contains e size); requer que equals e
hashCode sejam sobreescritos – não mantém nenhuma ordem, melhor
desempenho
 LinkedHashSet: semelhante ao HashSet, usa também uma lista
encadeada para manter a ordem dos elementos de acordo com a ordem
de entrada
 TreeSet: requer que a interface Comparable seja implementada –
ordena pelo valor dos elementos mantendo-os em uma árvore binária
de busca (não usa hash) – pior desempenho, mas provê ordenação
simplificada
 Como o HashSet evita repetições?
Caso dois elementos possuam o mesmo código hash, prossegue para
a comparação com o método equals. Portanto, deve-se
sobreescrever tanto o método equals quanto o hashCode
 Exemplo NetBeans  SetTest
http://publicationslist.org/junio
Até aqui
Listas (“conjuntos” COM repetição)
e SEM restrições (acesso e remoção
em posições aleatórias)
• Array: ArrayList<E>
• Lista encadeada: LinkedList<E>
Listas (“conjuntos” COM repetição)
e COM restrições (acesso e remoção
apenas nas extremidades)
• Array: ArrayDeque
• Lista encadeada:
LinkedList<E>
• class Stack<E>: pilha
• interface Queue<E>: fila
• Pilha: push/pop
• Fila: add/remove
• Pilha: push/pop
• Fila: add/remove
Sets (conjuntos SEM repetição)
• HashSet
• LinkedHashSet
• TreeSet
http://publicationslist.org/junio
Maps
http://publicationslist.org/junio
Map
 Map é um conceito amplamente usado em ciência da computação, refere-se
ao mapeamento entre chaves e valores
 Map é uma parte do arcabouço de coleções, mas que não descende de
Collection, mas sim da interface Map
public interface Map<K,V>
 Modela o conceito matemático de função, isto é:
 as chaves não possuem repetição
 uma dada chave mapeia exatamente um valor
http://publicationslist.org/junio
Map
 A interface
public interface Map<K,V> {
// Basic operations
V put(K key, V value);
V get(Object key);
V remove(Object key);
boolean containsKey(Object key);
boolean containsValue(Object value);
...
// Collection Views
public Set<K> keySet(); //as chaves sem repetição, determinam um conjunto
public Collection<V> values(); //já os valores, determinam apenas uma coleção
...
}
http://publicationslist.org/junio
Até aqui
Listas (“conjuntos” COM repetição)
e SEM restrições (acesso e remoção
em posições aleatórias)
• Array: ArrayList<E>
• Lista encadeada: LinkedList<E>
Listas (“conjuntos” COM repetição)
e COM restrições (acesso e remoção
apenas nas extremidades)
• Array: ArrayDeque
• Lista encadeada:
LinkedList<E>
• class Stack<E>: pilha
• interface Queue<E>: fila
• Pilha: push/pop
• Fila: add/remove
• Pilha: push/pop
• Fila: add/remove
Sets (conjuntos SEM repetição)
• HashSet
• LinkedHashSet
• TreeSet
Mapas (definem o conceito matemático
de função*)
• HashMap
• LinkedHashMap
• TreeMap
*com a diferença de que o contra-domínio (valores) não é necessariamente um conjunto
http://publicationslist.org/junio
Até aqui
Listas (“conjuntos” COM repetição)
e SEM restrições (acesso e remoção
em posições aleatórias)
• Array: ArrayList<E>
• Lista encadeada: LinkedList<E>
Listas (“conjuntos” COM repetição)
e COM restrições (acesso e remoção
apenas nas extremidades)
• Array: ArrayDeque
• Lista encadeada:
LinkedList<E>
• class Stack<E>: pilha
• interface Queue<E>: fila
• Pilha: push/pop
• Fila: add/remove
• Pilha: push/pop
• Fila: add/remove
Sets (conjuntos SEM repetição)
• HashSet
• LinkedHashSet
• TreeSet
Mapas (definem o conceito matemático
de função*)
• HashMap
• LinkedHashMap
• TreeMap
*com a diferença de que o contra-domínio (valores) não é necessariamente um conjunto
Os sets podem ser considerados casos especiais de maps nos
quais o valor mapeado por uma chave é o próprio valor da chave.
http://publicationslist.org/junio
Implementações de Map
 Assim como Set, possui três implementações diferentes:
 HashMap, LinkedHashMap e TreeMap
Estas implementações possuem as mesmas implicações que as de Set.
 Exemplo NetBeans  MapsTest
http://publicationslist.org/junio
Wildcards – coleção de
alguma coisa
http://publicationslist.org/junio
Wildcards
 Suponha o seguinte problema: você possui uma hierarquia de classes
Pessoa
/ 
Aluno Professor
 Você possui coleções ArrayList tanto de Alunos quanto de Professores
 E você deseja escrever um método que imprime o conteúdo destas
coleções, seja lá qual o seu conteúdo
 Pode-se pensar na seguinte solução
public void printCollection(ArrayList<Pessoa> umaColecao){
for(Pessoa o : umaColecao)
System.out.println(o.getNome());
}
 Funciona?
http://publicationslist.org/junio
Wildcards
 Resposta: não funciona
 Apesar da hierarquia de classes, para o compilador não há relação
nenhuma entre as diferentes definições:
ArrayList<Pessoa> ≠ ArrayList<Aluno> ≠ ArrayList<Professor>
 Desta maneira, o método só compila se receber exatamente um
ArrayList<Pessoa>
 Como proceder então?
 Usar WildCard
 O código ficaria então:
public void printCollection(ArrayList<?> umaColecao){
for(Pessoa o : umaColecao)
System.out.println(o.getNome());
}
http://publicationslist.org/junio
Wildcards
 O código ficaria então:
public void printCollection(ArrayList<?> umaColecao){
for(Pessoa o : umaColecao)
System.out.println(o.getNome());
}
 Ok, mas e se alguém passasse alguma coisa que
não é Pessoa? Por exemplo, ArrayList<Double>?
 Haveria problema de execução, pois Double não possui
um método getNome
 Solução, limitar o wildcard; ficaria assim:
public void printCollection(ArrayList<? extends Pessoa> umaColecao){
for(Pessoa o : umaColecao)
System.out.println(o.getNome());
}
 Seriam aceitos ArrayList<Pessoa>, ArrayList<Aluno> e ArrayList<Professor>
http://publicationslist.org/junio
Wildcards
 Solução, limitar o wildcard, ficaria assim:
public void printCollection(ArrayList<? extends Pessoa> umaColecao){
for(Pessoa o : umaColecao)
System.out.println(o.getNome());
}
 Seriam aceitos ArrayList<Pessoa>, ArrayList<Aluno> e ArrayList<Professor>
 “? extends” é denominado upper bound wildcard
 Mas, e se por alguma razão fosse desejado que apenas
Professor e Pessoa pudessem ser aceitos?
 A solução poderia ficar assim
public void printCollection(ArrayList<? super Professor> umaColecao){
for(Pessoa o : umaColecao)
System.out.println(o.getNome());
}
 Seriam aceitos ArrayList<Professor>, ArrayList<Pessoa>
 “? super” é denominado lower bound wildcard

Mais conteúdo relacionado

Mais procurados (10)

Aula05
Aula05Aula05
Aula05
 
POO - 13 - Arrays em Java
POO - 13 - Arrays em JavaPOO - 13 - Arrays em Java
POO - 13 - Arrays em Java
 
Java: Collections
Java: CollectionsJava: Collections
Java: Collections
 
Grupo2
Grupo2Grupo2
Grupo2
 
Java Básico :: Classe Vector
Java Básico :: Classe VectorJava Básico :: Classe Vector
Java Básico :: Classe Vector
 
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
 
JADE+JENA
JADE+JENAJADE+JENA
JADE+JENA
 
Csharp fundamentals
Csharp fundamentalsCsharp fundamentals
Csharp fundamentals
 
Slide Semana2 Rodrigo
Slide Semana2 RodrigoSlide Semana2 Rodrigo
Slide Semana2 Rodrigo
 

Destaque

Collection Java (2/2)
Collection Java (2/2)Collection Java (2/2)
Collection Java (2/2)rdgse
 
"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
 

Destaque (9)

Java.util
Java.utilJava.util
Java.util
 
Collection Java (2/2)
Collection Java (2/2)Collection Java (2/2)
Collection Java (2/2)
 
Seminário - Java Collections
Seminário - Java CollectionsSeminário - Java Collections
Seminário - Java Collections
 
"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
 

Semelhante a Java Collections Guide

Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections Eduardo Carvalho
 
Curso Java Básico - Aula 05
Curso Java Básico - Aula 05Curso Java Básico - Aula 05
Curso Java Básico - Aula 05Natanael Fonseca
 
Threads 06: Coleções concorrentes
Threads 06: Coleções concorrentesThreads 06: Coleções concorrentes
Threads 06: Coleções concorrentesHelder da Rocha
 
Coleções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsColeções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsDenis L Presciliano
 
Java Collections - Tomaz Lavieri
Java Collections - Tomaz LavieriJava Collections - Tomaz Lavieri
Java Collections - Tomaz LavieriElenilson Vieira
 
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricasCurso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricasLeonardo Melo Santos
 
PHP Conference 2017: Como melhorar seu código com Laravel Collections
PHP Conference 2017: Como melhorar seu código com Laravel CollectionsPHP Conference 2017: Como melhorar seu código com Laravel Collections
PHP Conference 2017: Como melhorar seu código com Laravel CollectionsAryel Tupinambá
 
Aula 02 - JavaScript: Arrays
Aula 02 - JavaScript: ArraysAula 02 - JavaScript: Arrays
Aula 02 - JavaScript: ArraysJessyka Lage
 
Desenvolvimento de Apps e Games para Android - Parte 6
Desenvolvimento de Apps e Games para Android - Parte 6Desenvolvimento de Apps e Games para Android - Parte 6
Desenvolvimento de Apps e Games para Android - Parte 6Erisvaldo Junior
 
Classes Anônimas, Internas e Coleções Java
Classes Anônimas, Internas e Coleções JavaClasses Anônimas, Internas e Coleções Java
Classes Anônimas, Internas e Coleções Javadanrleywillian1
 
Pilhas e Filas.ppt
Pilhas e Filas.pptPilhas e Filas.ppt
Pilhas e Filas.pptJoberthSilva
 
Android - Dicas de Performance
Android - Dicas de PerformanceAndroid - Dicas de Performance
Android - Dicas de PerformanceAmélia Pessoa
 
.200.2023-01.Categorias em Bancos de Dados.PT.pdf
.200.2023-01.Categorias em Bancos de Dados.PT.pdf.200.2023-01.Categorias em Bancos de Dados.PT.pdf
.200.2023-01.Categorias em Bancos de Dados.PT.pdfBrunoBraga94
 
Programação orientada a objetos - IV
Programação orientada a objetos - IVProgramação orientada a objetos - IV
Programação orientada a objetos - IVGabriel Faustino
 
Java: Composicao e Array List
Java: Composicao e Array ListJava: Composicao e Array List
Java: Composicao e Array ListArthur Emanuel
 

Semelhante a Java Collections Guide (20)

Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections
 
Curso Java Básico - Aula 05
Curso Java Básico - Aula 05Curso Java Básico - Aula 05
Curso Java Básico - Aula 05
 
Threads 06: Coleções concorrentes
Threads 06: Coleções concorrentesThreads 06: Coleções concorrentes
Threads 06: Coleções concorrentes
 
Coleções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsColeções Propriedade, Resources e Strings
Coleções Propriedade, Resources e Strings
 
Java Collections - Tomaz Lavieri
Java Collections - Tomaz LavieriJava Collections - Tomaz Lavieri
Java Collections - Tomaz Lavieri
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricasCurso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
Curso de OO com C# - Parte 05 - Coleções genéricas e não-genéricas
 
PHP Conference 2017: Como melhorar seu código com Laravel Collections
PHP Conference 2017: Como melhorar seu código com Laravel CollectionsPHP Conference 2017: Como melhorar seu código com Laravel Collections
PHP Conference 2017: Como melhorar seu código com Laravel Collections
 
Aula 02 - JavaScript: Arrays
Aula 02 - JavaScript: ArraysAula 02 - JavaScript: Arrays
Aula 02 - JavaScript: Arrays
 
Desenvolvimento de Apps e Games para Android - Parte 6
Desenvolvimento de Apps e Games para Android - Parte 6Desenvolvimento de Apps e Games para Android - Parte 6
Desenvolvimento de Apps e Games para Android - Parte 6
 
Classes Anônimas, Internas e Coleções Java
Classes Anônimas, Internas e Coleções JavaClasses Anônimas, Internas e Coleções Java
Classes Anônimas, Internas e Coleções Java
 
Pilhas e Filas.ppt
Pilhas e Filas.pptPilhas e Filas.ppt
Pilhas e Filas.ppt
 
Android - Dicas de Performance
Android - Dicas de PerformanceAndroid - Dicas de Performance
Android - Dicas de Performance
 
Colecções do c#
Colecções do c#Colecções do c#
Colecções do c#
 
.200.2023-01.Categorias em Bancos de Dados.PT.pdf
.200.2023-01.Categorias em Bancos de Dados.PT.pdf.200.2023-01.Categorias em Bancos de Dados.PT.pdf
.200.2023-01.Categorias em Bancos de Dados.PT.pdf
 
Aula 13
Aula 13Aula 13
Aula 13
 
Classes e Estrutura de Dados
Classes e Estrutura de DadosClasses e Estrutura de Dados
Classes e Estrutura de Dados
 
Programação orientada a objetos - IV
Programação orientada a objetos - IVProgramação orientada a objetos - IV
Programação orientada a objetos - IV
 
Java: Composicao e Array List
Java: Composicao e Array ListJava: Composicao e Array List
Java: Composicao e Array List
 
Orm android
Orm androidOrm android
Orm android
 

Mais de Universidade de São Paulo

Introdução às ferramentas de Business Intelligence do ecossistema Hadoop
Introdução às ferramentas de Business Intelligence do ecossistema HadoopIntrodução às ferramentas de Business Intelligence do ecossistema Hadoop
Introdução às ferramentas de Business Intelligence do ecossistema HadoopUniversidade de São Paulo
 
On the Support of a Similarity-Enabled Relational Database Management System ...
On the Support of a Similarity-Enabled Relational Database Management System ...On the Support of a Similarity-Enabled Relational Database Management System ...
On the Support of a Similarity-Enabled Relational Database Management System ...Universidade de São Paulo
 
Effective and Unsupervised Fractal-based Feature Selection for Very Large Dat...
Effective and Unsupervised Fractal-based Feature Selection for Very Large Dat...Effective and Unsupervised Fractal-based Feature Selection for Very Large Dat...
Effective and Unsupervised Fractal-based Feature Selection for Very Large Dat...Universidade de São Paulo
 
Fire Detection on Unconstrained Videos Using Color-Aware Spatial Modeling and...
Fire Detection on Unconstrained Videos Using Color-Aware Spatial Modeling and...Fire Detection on Unconstrained Videos Using Color-Aware Spatial Modeling and...
Fire Detection on Unconstrained Videos Using Color-Aware Spatial Modeling and...Universidade de São Paulo
 
Unveiling smoke in social images with the SmokeBlock approach
Unveiling smoke in social images with the SmokeBlock approachUnveiling smoke in social images with the SmokeBlock approach
Unveiling smoke in social images with the SmokeBlock approachUniversidade de São Paulo
 
Vertex Centric Asynchronous Belief Propagation Algorithm for Large-Scale Graphs
Vertex Centric Asynchronous Belief Propagation Algorithm for Large-Scale GraphsVertex Centric Asynchronous Belief Propagation Algorithm for Large-Scale Graphs
Vertex Centric Asynchronous Belief Propagation Algorithm for Large-Scale GraphsUniversidade de São Paulo
 
Fast Billion-scale Graph Computation Using a Bimodal Block Processing Model
Fast Billion-scale Graph Computation Using a Bimodal Block Processing ModelFast Billion-scale Graph Computation Using a Bimodal Block Processing Model
Fast Billion-scale Graph Computation Using a Bimodal Block Processing ModelUniversidade de São Paulo
 
StructMatrix: large-scale visualization of graphs by means of structure detec...
StructMatrix: large-scale visualization of graphs by means of structure detec...StructMatrix: large-scale visualization of graphs by means of structure detec...
StructMatrix: large-scale visualization of graphs by means of structure detec...Universidade de São Paulo
 
Techniques for effective and efficient fire detection from social media images
Techniques for effective and efficient fire detection from social media imagesTechniques for effective and efficient fire detection from social media images
Techniques for effective and efficient fire detection from social media imagesUniversidade de São Paulo
 
Multimodal graph-based analysis over the DBLP repository: critical discoverie...
Multimodal graph-based analysis over the DBLP repository: critical discoverie...Multimodal graph-based analysis over the DBLP repository: critical discoverie...
Multimodal graph-based analysis over the DBLP repository: critical discoverie...Universidade de São Paulo
 
Supervised-Learning Link Recommendation in the DBLP co-authoring network
Supervised-Learning Link Recommendation in the DBLP co-authoring networkSupervised-Learning Link Recommendation in the DBLP co-authoring network
Supervised-Learning Link Recommendation in the DBLP co-authoring networkUniversidade de São Paulo
 
Reviewing Data Visualization: an Analytical Taxonomical Study
Reviewing Data Visualization: an Analytical Taxonomical StudyReviewing Data Visualization: an Analytical Taxonomical Study
Reviewing Data Visualization: an Analytical Taxonomical StudyUniversidade de São Paulo
 
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Universidade de São Paulo
 
Visualization tree multiple linked analytical decisions
Visualization tree multiple linked analytical decisionsVisualization tree multiple linked analytical decisions
Visualization tree multiple linked analytical decisionsUniversidade de São Paulo
 

Mais de Universidade de São Paulo (20)

A gentle introduction to Deep Learning
A gentle introduction to Deep LearningA gentle introduction to Deep Learning
A gentle introduction to Deep Learning
 
Computação: carreira e mercado de trabalho
Computação: carreira e mercado de trabalhoComputação: carreira e mercado de trabalho
Computação: carreira e mercado de trabalho
 
Introdução às ferramentas de Business Intelligence do ecossistema Hadoop
Introdução às ferramentas de Business Intelligence do ecossistema HadoopIntrodução às ferramentas de Business Intelligence do ecossistema Hadoop
Introdução às ferramentas de Business Intelligence do ecossistema Hadoop
 
On the Support of a Similarity-Enabled Relational Database Management System ...
On the Support of a Similarity-Enabled Relational Database Management System ...On the Support of a Similarity-Enabled Relational Database Management System ...
On the Support of a Similarity-Enabled Relational Database Management System ...
 
Effective and Unsupervised Fractal-based Feature Selection for Very Large Dat...
Effective and Unsupervised Fractal-based Feature Selection for Very Large Dat...Effective and Unsupervised Fractal-based Feature Selection for Very Large Dat...
Effective and Unsupervised Fractal-based Feature Selection for Very Large Dat...
 
Fire Detection on Unconstrained Videos Using Color-Aware Spatial Modeling and...
Fire Detection on Unconstrained Videos Using Color-Aware Spatial Modeling and...Fire Detection on Unconstrained Videos Using Color-Aware Spatial Modeling and...
Fire Detection on Unconstrained Videos Using Color-Aware Spatial Modeling and...
 
Unveiling smoke in social images with the SmokeBlock approach
Unveiling smoke in social images with the SmokeBlock approachUnveiling smoke in social images with the SmokeBlock approach
Unveiling smoke in social images with the SmokeBlock approach
 
Vertex Centric Asynchronous Belief Propagation Algorithm for Large-Scale Graphs
Vertex Centric Asynchronous Belief Propagation Algorithm for Large-Scale GraphsVertex Centric Asynchronous Belief Propagation Algorithm for Large-Scale Graphs
Vertex Centric Asynchronous Belief Propagation Algorithm for Large-Scale Graphs
 
Fast Billion-scale Graph Computation Using a Bimodal Block Processing Model
Fast Billion-scale Graph Computation Using a Bimodal Block Processing ModelFast Billion-scale Graph Computation Using a Bimodal Block Processing Model
Fast Billion-scale Graph Computation Using a Bimodal Block Processing Model
 
An introduction to MongoDB
An introduction to MongoDBAn introduction to MongoDB
An introduction to MongoDB
 
StructMatrix: large-scale visualization of graphs by means of structure detec...
StructMatrix: large-scale visualization of graphs by means of structure detec...StructMatrix: large-scale visualization of graphs by means of structure detec...
StructMatrix: large-scale visualization of graphs by means of structure detec...
 
Apresentacao vldb
Apresentacao vldbApresentacao vldb
Apresentacao vldb
 
Techniques for effective and efficient fire detection from social media images
Techniques for effective and efficient fire detection from social media imagesTechniques for effective and efficient fire detection from social media images
Techniques for effective and efficient fire detection from social media images
 
Multimodal graph-based analysis over the DBLP repository: critical discoverie...
Multimodal graph-based analysis over the DBLP repository: critical discoverie...Multimodal graph-based analysis over the DBLP repository: critical discoverie...
Multimodal graph-based analysis over the DBLP repository: critical discoverie...
 
Supervised-Learning Link Recommendation in the DBLP co-authoring network
Supervised-Learning Link Recommendation in the DBLP co-authoring networkSupervised-Learning Link Recommendation in the DBLP co-authoring network
Supervised-Learning Link Recommendation in the DBLP co-authoring network
 
Graph-based Relational Data Visualization
Graph-based RelationalData VisualizationGraph-based RelationalData Visualization
Graph-based Relational Data Visualization
 
Reviewing Data Visualization: an Analytical Taxonomical Study
Reviewing Data Visualization: an Analytical Taxonomical StudyReviewing Data Visualization: an Analytical Taxonomical Study
Reviewing Data Visualization: an Analytical Taxonomical Study
 
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
 
Dawarehouse e OLAP
Dawarehouse e OLAPDawarehouse e OLAP
Dawarehouse e OLAP
 
Visualization tree multiple linked analytical decisions
Visualization tree multiple linked analytical decisionsVisualization tree multiple linked analytical decisions
Visualization tree multiple linked analytical decisions
 

Java Collections Guide

  • 1. http://publicationslist.org/junio Java Collections Prof. Jose Fernando Rodrigues Junior http://www.icmc.usp.br/~junio junio@icmc.usp.br INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO - USP - SCC0504 - Programação Orientada a Objetos
  • 2. http://publicationslist.org/junio Introdução  Set (conjunto): composição elementos sem repetição e sem ordem definida. Exemplo:  A = {banana, maçã, abacate}  Multiset (multi-conjunto): composição de elementos possivelmente com repetição e sem ordem definida. Exemplo:  A = {banana, maçã, abacate, banana} Também denominado: list (lista), grupo (bunch), bag (saco, sacola), heap (monte), sample (amostra), suite (jogo de) e collection (coleção)  Sequência: conjunto de elementos cuja ordem importa. Exemplo: {banana, maçã, abacate} ≠ {maçã, banana, abacate}
  • 3. http://publicationslist.org/junio Introdução  Set (conjunto): composição elementos sem repetição e sem ordem definida. Exemplo:  A = {banana, maçã, abacate}  Multiset (multi-conjunto): composição de elementos possivelmente com repetição e sem ordem definida. Exemplo:  A = {banana, maçã, abacate, banana} Também denominado: list (lista), grupo (bunch), bag (saco sacola), heap (monte), sample (amostra), suite (jogo de) e collection (coleção)  Sequência: conjunto de elementos cuja ordem importa. Exemplo: {banana, maçã, abacate} ≠ {maçã, banana, abacate} Em computação, pela própria definição baseada na máquina de Turing, conjuntos e multiconjuntos possuem alguma ordem – pois estão em memória. Essa ordem pode ser considerada (definindo-se uma sequência) ou não.
  • 4. http://publicationslist.org/junio Introdução  Conjuntos, multiconjuntos e sequências são alguns dos principais conceitos de toda a matemática, ciência da computação e mesmo cognição humana  Tratam-se de conceitos abstratos (em contraste a conceitos concretos, como um carro por exemplo)  Em muitos contextos, por praticidade, o termo Collection se refere de maneira geral a conjuntos, multiconjuntos e sequências (ordered collections)
  • 6. http://publicationslist.org/junio A interface Collection  Collections em Java começam pela interface de mesmo nome – e são genéricas! public interface Collection<E> extends Iterable<E> { // Basic operations int size(); boolean isEmpty(); boolean contains(Object element); boolean add(E element); //optional boolean remove(Object element); //optional Iterator<E> iterator(); // Bulk operations boolean containsAll(Collection<?> c); boolean addAll(Collection<? extends E> c); //optional boolean removeAll(Collection<?> c); //optional boolean retainAll(Collection<?> c); //optional void clear(); //optional // Array operations Object[] toArray(); <T> T[] toArray(T[] a); } As operações da interface Collection são as operações comuns a conjuntos, multi- conjuntos e sequências.
  • 7. http://publicationslist.org/junio Iteradores  A idéia de coleções que se baseiam em uma interface raíz e que são genéricas traz dois problemas: 1) a maneira como se percorre os elementos da coleção; por exemplo, percorrer um ArrayList (por índice) é diferente de se percorrer um LinkedList (por encadeamento) 2) não se sabe com antescedência qual o tipo armazenado na coleção, portanto, ponteiros e aritmética de ponteiros não é possível  Solução: iteradores  Iteradores abstraem como e o quê está sendo percorrido em uma coleção, permitindo a escrita de código mais geral (que possui por baixo código mais específico)
  • 8. http://publicationslist.org/junio Iteradores  A idéia de coleções que se baseiam em uma interface raíz e que são genéricas traz dois problemas: 1) a maneira como se percorre os elementos da coleção; por exemplo, percorrer um ArrayList (por índice) é diferente de se percorrer um LinkedList (por encadeamento) 2) não se sabe com antescedência qual o tipo armazenado na coleção, portanto, ponteiros e aritmética de ponteiros não é possível  Solução: iteradores  Iteradores abstraem como e o quê está sendo percorrido em uma coleção, permitindo a escrita de código mais geral (que possui por baixo código mais específico) A solução é ter a interface Iterable<E> como superinterface da interface Collection <E>: interface Collection <E> extends Iterable<E> O quê requer os seguintes métodos: • boolean hasNext(); • E next(); • void remove();
  • 9. http://publicationslist.org/junio Iteradores A interface Iterator <E>:  boolean hasNext() Returns true if the iteration has more elements.  E next() Returns the next element in the iteration.  void remove() Removes from the underlying collection the last element returned by the iterator (optional operation). Esses três métodos devem ser implementados para se definir o iterador de uma coleção genérica. Mas já estão disponíveis em um monte de coleções do Java.
  • 10. http://publicationslist.org/junio Arrays e listas dinâmicas  Arrays (arranjos) e linked lists (listas encadeadas) são as estruturas mais usadas para problemas de collections – elas permitem que se tenha conjuntos, multiconjuntos e sequências em memória  Exemplo NetBeans  ListTest  Quando usar ArrayList e quando usar LinkedList?  ArrayList: quando se têm muito acesso aleatório (acessos não sequenciais), o que é eficiente por meio de índice de array abstraído pelo iterador, e pouca edição (add e remove)  LinkedList: quando se tem muita edição (add e remove) e acesso sequencial dos elementos da lista
  • 11. http://publicationslist.org/junio Arrays e listas dinâmicas  Alguns collections muito conhecidos são as estruturas de dados Pilha e Fila  Qual é a relação entre arrays, linked lists, pilhas e filas?  Arrays e linked lists são apenas conjuntos de dados (ou coleções)  Pilhas e filas são conjuntos (ou coleções) com restrições de acesso  Portanto:  Um array pode ser uma pilha ou uma fila  Um linked list pode ser uma pilha ou uma fila  Tanto arrays como linked lists são listas (ou conjuntos, ou coleções)  Um array não pode ser um linked list, e vice versa  Uma pilha não pode ser uma fila, e vice versa  Todos são coleções
  • 12. http://publicationslist.org/junio Arrays e listas dinâmicas  Alguns collections muito conhecidos são as estruturas de dados Pilha e Fila  Qual é a relação entre arrays, linked lists, pilhas e filas?  Arrays e linked lists são apenas conjuntos de dados (ou coleções)  Pilhas e filas são conjuntos (ou coleções) com restrições de acesso  Portanto:  Um array pode ser uma pilha ou uma fila  Um linked list pode ser uma pilha ou uma fila  Tanto arrays como linked lists são listas (ou conjuntos, ou coleções)  Um array não pode ser um linked list, e vice versa  Uma pilha não pode ser uma fila, e vice versa  Todos são coleções Estes e outros fatos se refletem na definição e no uso das coleções do Java.
  • 13. http://publicationslist.org/junio Queue (Fila)  Fila: trata-se de uma coleção na qual a entrada só ocorre de um lado e a saída só ocorre do lado oposto – FIFO, portanto Fila EntradaSaída
  • 14. http://publicationslist.org/junio Stack (Pilha)  Pilha: uma coleção na qual a entrada e a saída só ocorrem do mesmo lado – LIFO, portanto Pilha Entrada Saída
  • 15. http://publicationslist.org/junio ArrayDeque  Array que aceita operações de inserção e remoção em ambas as extremidades  Portanto, um ArrayDeque pode ser:  uma fila sobre um array: métodos add e remove  uma pilha sobre um array: métodos push e pop  Exemplo NetBeans  QueueStackArrayTest Deque Entrada Saída Entrada Saída
  • 16. http://publicationslist.org/junio LiskedList  Da mesma maneira, um linked list aceita naturalmente operações de adição e remoção em ambas as extremidades  Portanto, uma LinkedList pode ser:  uma fila sobre uma lista encadeada: métodos add e remove  uma pilha sobre sobre uma lista encadeada: métodos push e pop  Exemplo NetBeans  QueueStackLinkedListTest
  • 17. http://publicationslist.org/junio LiskedList  Da mesma maneira, um linked list aceita naturalmente operações de adição e remoção em ambas as extremidades  Portanto, uma LinledList pode ser:  uma fila sobre uma lista encadeada: métodos add e remove  uma pilha sobre sobre uma lista encadeada: métodos push e pop  Exemplo NetBeans As diferentes possibilidades de implementação dependem das características de cada aplicação. A documentação da classe ArrayDeque adverte que: “This class is likely to be faster than Stack when used as a stack, and faster than LinkedList when used as a queue.” (http://download.oracle.com/javase/6/docs/api/) Já a mais específica classe Stack adverte que: “A more complete and consistent set of LIFO stack operations is provided by the Deque interface and its implementations, which should be used in preference to this class.” (http://download.oracle.com/javase/6/docs/api/) Outras soluções da API: vector, arrays, stack, diversas variações de queue e de lista, entre outras.
  • 18. http://publicationslist.org/junio Sorting  Como já mencionado em outra aula, a ordenação de coleções (listas) depende da definição de uma relação de ordem total entre seus elementos  Isso é possível usando-se a interface Comparable: public interface Comparable<T> { public int compareTo(T o); }  Uma vez implementada, pode-se ordenar uma dada coleção chamando-se o método estático public static void sort(List<T> list)
  • 19. http://publicationslist.org/junio Sorting  Os tipos primitivos do Java implementam a interface Comparable em suas respectivas classes de boxing.
  • 20. http://publicationslist.org/junio Sorting  Suponha o seguinte problema: você está usando objetos de uma classe da qual você não tem acesso ao código fonte, e esta classe não implementa a interface Comparable ou implementa diferentemente do que você deseja.  Se você quiser ordenar uma lista com os objetos desta classe, como fazer?  Para este problema, o Java oferece uma alternativa, a interface Comparator public interface Comparator<T> { int compare(T o1, T o2); }  Torna-se possível a definição de comparadores de objetos ao invés de objetos que são comparáveis entre si. public static void sort(List<T> list, Comparator<T> c)  Exemplo NetBeans  ComparatorTest e ListTest
  • 21. http://publicationslist.org/junio Até aqui Listas (“conjuntos” COM repetição) e SEM restrições (acesso e remoção em posições aleatórias) • Array: ArrayList<E> • Lista encadeada: LinkedList<E> Listas (“conjuntos” COM repetição) e COM restrições (acesso e remoção apenas nas extremidades) • Array: ArrayDeque • Lista encadeada: LinkedList<E> • class Stack<E>: pilha • interface Queue<E>: fila • Pilha: push/pop • Fila: add/remove • Pilha: push/pop • Fila: add/remove Sets (conjuntos SEM repetição) Próximos slides
  • 23. http://publicationslist.org/junio Set  A interface Set descende de Collection public interface Set<E> extends Collection<E>  Trata-se de um conjunto, matematicamente falando, sem repetição e sem ordem  Interface base para coleções que NÃO permitem repetição de elementos  Não pode haver dois elementos e1 e e2 tais que e1.equals(e2)  Não pode haver dois elementos com valor null
  • 24. http://publicationslist.org/junio Implementações de Set  Existem três implementações diferentes, todas servem para o mesmo fim, mas com desempenho e requisitos diferentes:  HashSet: usa um hash para oferecer tempo constante, idealmente O(1), para operações (add, remove, contains e size); requer que equals e hashCode sejam sobreescritos – não mantém nenhuma ordem, melhor desempenho  LinkedHashSet: semelhante ao HashSet, usa também uma lista encadeada para manter a ordem dos elementos de acordo com a ordem de entrada  TreeSet: requer que a interface Comparable seja implementada – ordena pelo valor dos elementos mantendo-os em uma árvore binária de busca (não usa hash) – pior desempenho, mas provê ordenação simplificada  Como o HashSet evita repetições? Caso dois elementos possuam o mesmo código hash, prossegue para a comparação com o método equals. Portanto, deve-se sobreescrever tanto o método equals quanto o hashCode  Exemplo NetBeans  SetTest
  • 25. http://publicationslist.org/junio Até aqui Listas (“conjuntos” COM repetição) e SEM restrições (acesso e remoção em posições aleatórias) • Array: ArrayList<E> • Lista encadeada: LinkedList<E> Listas (“conjuntos” COM repetição) e COM restrições (acesso e remoção apenas nas extremidades) • Array: ArrayDeque • Lista encadeada: LinkedList<E> • class Stack<E>: pilha • interface Queue<E>: fila • Pilha: push/pop • Fila: add/remove • Pilha: push/pop • Fila: add/remove Sets (conjuntos SEM repetição) • HashSet • LinkedHashSet • TreeSet
  • 27. http://publicationslist.org/junio Map  Map é um conceito amplamente usado em ciência da computação, refere-se ao mapeamento entre chaves e valores  Map é uma parte do arcabouço de coleções, mas que não descende de Collection, mas sim da interface Map public interface Map<K,V>  Modela o conceito matemático de função, isto é:  as chaves não possuem repetição  uma dada chave mapeia exatamente um valor
  • 28. http://publicationslist.org/junio Map  A interface public interface Map<K,V> { // Basic operations V put(K key, V value); V get(Object key); V remove(Object key); boolean containsKey(Object key); boolean containsValue(Object value); ... // Collection Views public Set<K> keySet(); //as chaves sem repetição, determinam um conjunto public Collection<V> values(); //já os valores, determinam apenas uma coleção ... }
  • 29. http://publicationslist.org/junio Até aqui Listas (“conjuntos” COM repetição) e SEM restrições (acesso e remoção em posições aleatórias) • Array: ArrayList<E> • Lista encadeada: LinkedList<E> Listas (“conjuntos” COM repetição) e COM restrições (acesso e remoção apenas nas extremidades) • Array: ArrayDeque • Lista encadeada: LinkedList<E> • class Stack<E>: pilha • interface Queue<E>: fila • Pilha: push/pop • Fila: add/remove • Pilha: push/pop • Fila: add/remove Sets (conjuntos SEM repetição) • HashSet • LinkedHashSet • TreeSet Mapas (definem o conceito matemático de função*) • HashMap • LinkedHashMap • TreeMap *com a diferença de que o contra-domínio (valores) não é necessariamente um conjunto
  • 30. http://publicationslist.org/junio Até aqui Listas (“conjuntos” COM repetição) e SEM restrições (acesso e remoção em posições aleatórias) • Array: ArrayList<E> • Lista encadeada: LinkedList<E> Listas (“conjuntos” COM repetição) e COM restrições (acesso e remoção apenas nas extremidades) • Array: ArrayDeque • Lista encadeada: LinkedList<E> • class Stack<E>: pilha • interface Queue<E>: fila • Pilha: push/pop • Fila: add/remove • Pilha: push/pop • Fila: add/remove Sets (conjuntos SEM repetição) • HashSet • LinkedHashSet • TreeSet Mapas (definem o conceito matemático de função*) • HashMap • LinkedHashMap • TreeMap *com a diferença de que o contra-domínio (valores) não é necessariamente um conjunto Os sets podem ser considerados casos especiais de maps nos quais o valor mapeado por uma chave é o próprio valor da chave.
  • 31. http://publicationslist.org/junio Implementações de Map  Assim como Set, possui três implementações diferentes:  HashMap, LinkedHashMap e TreeMap Estas implementações possuem as mesmas implicações que as de Set.  Exemplo NetBeans  MapsTest
  • 33. http://publicationslist.org/junio Wildcards  Suponha o seguinte problema: você possui uma hierarquia de classes Pessoa / Aluno Professor  Você possui coleções ArrayList tanto de Alunos quanto de Professores  E você deseja escrever um método que imprime o conteúdo destas coleções, seja lá qual o seu conteúdo  Pode-se pensar na seguinte solução public void printCollection(ArrayList<Pessoa> umaColecao){ for(Pessoa o : umaColecao) System.out.println(o.getNome()); }  Funciona?
  • 34. http://publicationslist.org/junio Wildcards  Resposta: não funciona  Apesar da hierarquia de classes, para o compilador não há relação nenhuma entre as diferentes definições: ArrayList<Pessoa> ≠ ArrayList<Aluno> ≠ ArrayList<Professor>  Desta maneira, o método só compila se receber exatamente um ArrayList<Pessoa>  Como proceder então?  Usar WildCard  O código ficaria então: public void printCollection(ArrayList<?> umaColecao){ for(Pessoa o : umaColecao) System.out.println(o.getNome()); }
  • 35. http://publicationslist.org/junio Wildcards  O código ficaria então: public void printCollection(ArrayList<?> umaColecao){ for(Pessoa o : umaColecao) System.out.println(o.getNome()); }  Ok, mas e se alguém passasse alguma coisa que não é Pessoa? Por exemplo, ArrayList<Double>?  Haveria problema de execução, pois Double não possui um método getNome  Solução, limitar o wildcard; ficaria assim: public void printCollection(ArrayList<? extends Pessoa> umaColecao){ for(Pessoa o : umaColecao) System.out.println(o.getNome()); }  Seriam aceitos ArrayList<Pessoa>, ArrayList<Aluno> e ArrayList<Professor>
  • 36. http://publicationslist.org/junio Wildcards  Solução, limitar o wildcard, ficaria assim: public void printCollection(ArrayList<? extends Pessoa> umaColecao){ for(Pessoa o : umaColecao) System.out.println(o.getNome()); }  Seriam aceitos ArrayList<Pessoa>, ArrayList<Aluno> e ArrayList<Professor>  “? extends” é denominado upper bound wildcard  Mas, e se por alguma razão fosse desejado que apenas Professor e Pessoa pudessem ser aceitos?  A solução poderia ficar assim public void printCollection(ArrayList<? super Professor> umaColecao){ for(Pessoa o : umaColecao) System.out.println(o.getNome()); }  Seriam aceitos ArrayList<Professor>, ArrayList<Pessoa>  “? super” é denominado lower bound wildcard