Académique Documents
Professionnel Documents
Culture Documents
Collections
A API do Collections fornece diversas
classes que representam estruturas de
dados avanadas.
Collections
Possui 3 grandes tipos de coleo
Lista (java.util.List)
Conjunto (java.util.Set)
Mapa (java.util.Map)
Collections
Collections
Operaes:
Adio
Remoo
Acesso
Etc
5
Collections
Collections
J temos o Array do Java...Qual seria
a vantagem de utilizarmos colees?
Collections
Redimensionamento de array?
Buscar um elemento sem conhecer o
ndice?
Etc?
Collections
Lista (java.util.List)
Uma coleo de elementos em
ordem linear.
Collections
Lista (java.util.List)
A Lista pode ser mantida ordenada
ou no
10
Collections
Classes mais utilizadas da Interface List
11
Collections
ArrayList - Instanciao
import java.util.ArrayList;
public class App {
public static void main(String[] args) {
ArrayList lista = new ArrayList();
lista.add("Joo");
lista.add("Maria");
lista.add("Jos");
Qualquer objeto
pode ser
adicionado
12
Collections
ArrayList - Instanciao
public static void main(String[] args) {
Aluno aluno = new Aluno("Jos");
Disciplina disciplina = new Disciplina("Java");
ArrayList lista = new ArrayList();
lista.add(aluno);
lista.add(disciplina);
for (int i = 0; i < lista.size(); i++) {
if (lista.get(i) instanceof Aluno) {
Necessrio
Aluno a = (Aluno) lista.get(i);
um cast
System.out.println(a.getNome());
} else if (lista.get(i) instanceof Disciplina) {
Disciplina d = (Disciplina) lista.get(i);
System.out.println(d.getDisciplina());
}
}
}
efetuar
13
Collections
ArrayList Polimorfismo e Generics
public static void main(String[] args) {
Aluno aluno = new Aluno("Jos");
List<Aluno> lista = new ArrayList<Aluno>();
lista.add(aluno);
for (Aluno a : lista) {
System.out.println(a.getNome());
}
}
14
Collections
ArrayList Ordenao
public static void main(String[] args) {
List<String> lista = new ArrayList<String>();
lista.add("Jos");
lista.add("Maria");
lista.add("Antnio");
Collections.sort(lista);
for (String nome : lista) {
System.out.println(nome);
}
}
Ordenando as Strings
- String implementa
Comparable, ou seja,
A classe String j
implementou qual
seria o critrio de
ordenao
15
Collections
ArrayList Ordenao de Aluno
E se quisermos efetuar uma
ordenao de Alunos por ordem
alfabtica?
java.lang.Comparable
public interface Comparable<T> {
int compareTo(T objeto);
}
16
Collections
ArrayList Ordenao de Aluno
public class Aluno implements Comparable<Aluno> {
private String nome;
public Aluno(String nome) {
this.nome = nome;
}
public String getNome() {
return nome;
}
public int compareTo(Aluno o) {
return (this.nome.toLowerCase().
compareTo(o.getNome().toLowerCase()));
}
}
17
Collections
ArrayList Ordenao de Aluno
public static void main(String[] args) {
Aluno aluno = new Aluno("Jos");
Aluno aluno2 = new Aluno("Adriano");
Aluno aluno3 = new Aluno("Bruno");
List<Aluno> lista = new ArrayList<Aluno>();
lista.add(aluno);
lista.add(aluno2);
lista.add(aluno3);
Collections.sort(lista);
for (Aluno a : lista) {
System.out.println(a.getNome());
}
}
18
Collections
ArrayList Ordenao de Aluno
E se quisermos efetuar uma
ordenao de Alunos por numero de
matrcula tambm?
19
Collections
ArrayList Ordenao de Aluno
J implementamos Comparable...no
podemos mais utiliz-lo. E no
queremos perder a comparao por
nome tambm...
20
Collections
ArrayList Ordenao de Aluno
Java.util.Comparator
public interface Comparator<T> {
int compare(T o1, T o2);
}
21
Collections
public class Aluno implements Comparable<Aluno>, Comparator<Aluno> {
private String nome;
private int matricula;
public Aluno() {
}
// Outros mtodos da classe aluno foram omitidos
public int compare(Aluno a1, Aluno a2) {
if (a1.getMatricula() > a2.getMatricula()) {
return 1;
Retorna 1 se o objeto comparador for maior
}
if (a1.getMatricula() < a2.getMatricula()) {
return -1;
Retorna -1 se o objeto comparador for menor
}
return 0;
}
}
22
Collections
ArrayList Ordenao de Aluno
Como Collection.sort saberia qual
critrio seguir?
Ordenar alfabeticamente ou;
Collections
public static void main(String[] args) {
Aluno aluno = new Aluno("Jos", 1234);
Aluno aluno2 = new Aluno("Adriano", 5436);
Aluno aluno3 = new Aluno("Bruno", 11);
List<Aluno> lista = new ArrayList<Aluno>();
lista.add(aluno);
lista.add(aluno2);
lista.add(aluno3);
24
Collections
ArrayList Ordenao de Aluno
E se eu quiser adicionar mais um
critrio de ordenao...
J implementamos Comparable e
Comparator...ficamos sem opo?
25
Collections
public static void main(String[] args) {
Aluno aluno = new Aluno("Gustavo Svio");
Aluno aluno2 = new Aluno("Vegeta");
Aluno aluno3 = new Aluno("Goku");
List<Aluno> lista = new ArrayList<Aluno>();
lista.add(aluno);
lista.add(aluno2);
lista.add(aluno3);
Collections.sort(lista, new Comparator<Aluno>() {
public int compare(Aluno o1, Aluno o2) {
if (o1.getNome().length() > o2.getNome().length()) {
return 1;
}
if (o1.getNome().length() < o2.getNome().length()) {
return -1;
}
return 0;
}
});
for (Aluno a : lista) {
System.out.println(a.getNome());
}
}
26
Collections
Ento...Quando devo implementar
Comparable e Comparator?
27
Collections
Comparable deve ser utilizada para
definir uma ordenao natural do
objeto (ordenao default) e ...
Comparator sempre que tivermos a
necessidade
de
fazermos
uma
ordenao diferente...
28
Collections
ArrayList - Removendo um objeto
public static void main(String[] args) {
List<String> lista = new ArrayList<String>();
lista.add("Gustavo");
lista.add("Svio");
lista.remove("Gustavo");
for (String nome : lista) {
System.out.println(nome);
}
}
29
Collections
ArrayList Verificando se um objeto
existe
public static void main(String[] args) {
List<String> lista = new ArrayList<String>();
lista.add("Gustavo");
lista.add("Svio");
if (lista.contains("Gustavo")) {
System.out.println("Existe");
}
}
30
Collections
ArrayList Percorrendo com Iterator
public static void main(String[] args) {
List<String> lista = new ArrayList<String>();
lista.add("Gustavo");
lista.add("Svio");
Iterator<String> it = lista.iterator();
while (it.hasNext()) {
String nome = (String) it.next();
System.out.println(nome);
}
}
31
Collections
Quando devo usar ArrayList e/ou
LinkedList ou Vector?
Use ArrayList se acessar por ndice
for comum (ex. pesquisa binria)
Use LinkedList se inserir ou remover
elementos do meio com frequncia
32
Collections
Vector bastante semelhante ao
ArrayList, mas ele gera um overhead
maior: seus mtodos so syncronized.
33
Collections
34
Collections
Set (java.util.Set)
Uma coleo de elementos
semelhante a um conjunto da
matemtica.
35
Collections
A ordem em que os elementos so
armazenados podem no ser a ordem
em que eles foram inseridos no
conjunto.
A interface Set no define esse
comportamento,
isso
varia
de
implementao.
36
Collections
No existem elementos duplicados
em um Set
37
Collections
HashSet implementado com uma
tabela hash. Elementos no so
ordenados.
TreeSet implementado com uma
rvore. Os elementos so ordenados.
38
Collections
LinkedHashSet um meio termo
entre
HashSet
e
TreeSet.
39
Collections
Instanciao HashSet
public static void main(String[] args) {
Set<Integer> numeros = new HashSet<Integer>();
numeros.add(100);
numeros.add(30);
numeros.add(1);
numeros.add(25);
numeros.add(9);
numeros.add(25); // repetido!
No ser inserido
40
Collections
Instanciao TreeSet
public static void main(String[] args) {
Set<Integer> numeros = new TreeSet<Integer>();
numeros.add(100);
numeros.add(30);
numeros.add(1);
numeros.add(25);
numeros.add(9);
numeros.add(25); // repetido!
No ser inserido
41
Collections
Instanciao TreeSet
Toda classe que usa um TreeSet precisa implementar Comparable
public class Aula {
private int qtdAlunos;
conjunto.add(new Aula(10));
conjunto.add(new Aula(4));
conjunto.add(new Aula(1));
42
Collections
Instanciao TreeSet
public class Aula implements Comparable<Aula> {
private int qtdAlunos;
public Aula(int qtdAlunos) {
this.qtdAlunos = qtdAlunos;
}
public int getQtdAlunos() {
return this.qtdAlunos;
}
public int compareTo(Aula o) {
if (this.qtdAlunos > o.getQtdAlunos()) {
return 1;
}
if (this.qtdAlunos < o.getQtdAlunos()) {
return -1;
}
return 0;
}
}
43
Collections
Instanciao LinkedHashSet
public static void main(String[] args) {
Set<Aula> conjunto = new LinkedHashSet<Aula>();
conjunto.add(new Aula(10));
conjunto.add(new Aula(4));
conjunto.add(new Aula(1));
for (Aula a: conjunto) {
System.out.println(a.getQtdAlunos());
}
}
44
Collections
Desempenho
TreeSet possui o pior desempenho
por ser ordenado
HashSet e LinkedHashSet
geralmente possuem desempenho
bem prximos.
45
Collections
Map (java.util.Map)
composto por um conjunto de
associaes chave valor
equivalente ao conceito de
dicionrio
46
Collections
Map (java.util.Map)
HashMap No ordenado
LinkedHashMap Preserva a
ordem de insero
HashTable Semelhante ao
HashMap com a exceo que
sincronizado
47
Collections
Instanciao HashMap
public static void main(String[] args) {
Map<String, Aula> mapa = new HashMap<String, Aula>();
mapa.put("Turma A", new Aula(10));
mapa.put("Turma H", new Aula(4));
mapa.put("Turma E", new Aula(1));
for (Entry<String, Aula> entry : mapa.entrySet()) {
System.out.println(entry.getKey().toString() + " - " +
entry.getValue().getQtdAlunos());
}
}
HashMap no permite a adio de dois elementos idnticos
equals e hashCode
48
Collections
Instanciao TreeMap
public static void main(String[] args) {
Map<String, Aula> mapa = new TreeMap<String, Aula>();
mapa.put("Turma A", new Aula(10));
mapa.put("Turma H", new Aula(4));
mapa.put("Turma E", new Aula(1));
for (Entry<String, Aula> entry : mapa.entrySet()) {
System.out.println(entry.getKey().toString() + " - " +
entry.getValue().getQtdAlunos());
}
}
Um objeto para ser chave precisa implementar comparable,
visto que TreeMap ordena pela chave!
49
Collections
Instanciao LinkedHashMap
public static void main(String[] args) {
Map<String, Aula> mapa = new LinkedHashMap<String, Aula>();
mapa.put("Turma A", new Aula(10));
mapa.put("Turma H", new Aula(4));
mapa.put("Turma E", new Aula(1));
for (Entry<String, Aula> entry : mapa.entrySet()) {
System.out.println(entry.getKey().toString() + " - " +
entry.getValue().getQtdAlunos());
}
}
LinkedHashMap preserva a posio de insero dos
elementos!
50
Referncias
http://docs.oracle.com/javase/7/docs/a
pi/java/util/List.html
http://docs.oracle.com/javase/7/docs/api
/java/util/Set.html
http://docs.oracle.com/javase/7/docs/a
pi/java/util/Map.html
51
Referncias
http://www.caelum.com.br/apostilajava-orientacao-objetos
http://www.dsc.ufcg.edu.br/~jacques/c
ursos/p2/html/ed/colecoes.htm
http://www.programcreek.com/2013/03
/arraylist-vs-linkedlist-vs-vector/
52