Buscar

Módulo_-_Coleções

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

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

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

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

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

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

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
Módulo Módulo 
ColeçõesColeções
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
Objetivo 
Apresentar as principais classes de 
coleção de Java
Introduzir os conceitos de
interface e realização
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
2
ColeçõesColeções
•• Considere o seguinte exemplo:Considere o seguinte exemplo:
•• Ao codificarmos estas classes, precisamos decidir como iremos Ao codificarmos estas classes, precisamos decidir como iremos 
Departamento Empregado
1 aloca � 1..*
0..1 é gerenciado por � 1Sigla
Nome
CPF
Nome
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
•• Ao codificarmos estas classes, precisamos decidir como iremos Ao codificarmos estas classes, precisamos decidir como iremos 
implementar os relacionamentos em Java. Para isto, será necessário implementar os relacionamentos em Java. Para isto, será necessário 
colocar novos atributos nas classes. Estes novos atributos são colocar novos atributos nas classes. Estes novos atributos são 
chamados de chamados de Atributos de RelacionamentoAtributos de Relacionamento ou ou Atributos ImplícitosAtributos Implícitos..
•• Regra Geral:Regra Geral:
–– Para cada Para cada associaçãoassociação ou ou agregaçãoagregação navegávelnavegável presente na classe, presente na classe, 
adicionamos um atributo de relacionamento.adicionamos um atributo de relacionamento.
•• Para relacionamentos Para relacionamentos unáriosunários colocamos um atributo cujo tipo deverá colocamos um atributo cujo tipo deverá 
ser “ser “ponteiro para um objeto da classe XXXponteiro para um objeto da classe XXX””
•• A grande questão é como são implementados os relacionamentos A grande questão é como são implementados os relacionamentos 
nn--áriosários. Uma primeira idéia é utilizarmos . Uma primeira idéia é utilizarmos arraysarrays para isto.para isto.
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
3
ColeçõesColeções
public class Departamentopublic class Departamento
{{
private Stringprivate String sigla;sigla;
private Stringprivate String nome;nome;
private Empregado[] private Empregado[] listaEmpregados;listaEmpregados;
private Empregado private Empregado gerente;gerente;
public Departamento(String sigla, String nome)public Departamento(String sigla, String nome)
{{
this.sigla = sigla;this.sigla = sigla;
this.nome = nome;this.nome = nome;
public class Empregadopublic class Empregado
{{
private Stringprivate String cpf;cpf;
private Stringprivate String nome;nome;
private Departamento depto;private Departamento depto;
public Empregado(String cpf, String nome, public Empregado(String cpf, String nome, 
Departamento depto)Departamento depto)
{{
this.cpf = cpf;this.cpf = cpf;
this.nome = nome;this.nome = nome;
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
this.nome = nome;this.nome = nome;
this.listaEmpregados = new Empregado[100];this.listaEmpregados = new Empregado[100];
}}
public void addEmpregado(Empregado novoEmp)public void addEmpregado(Empregado novoEmp)
{{
......
}}
public void removeEmpregado(Empregado exEmp)public void removeEmpregado(Empregado exEmp)
{{
......
}}
......
}}
this.nome = nome;this.nome = nome;
this.setDepto(depto);this.setDepto(depto);
}}
public void setDepto(Departamento depto)public void setDepto(Departamento depto)
{{
......
}}
......
}}
•• Nota:Nota: Observe que as duas associações são navegáveis a partir de Departamento, mas na Observe que as duas associações são navegáveis a partir de Departamento, mas na 
classe Empregado somente a associação “Aloca” é navegável; por isso é que temos somente classe Empregado somente a associação “Aloca” é navegável; por isso é que temos somente 
um atributo de relacionamento em Empregado, enquanto que em Departamento temos dois.um atributo de relacionamento em Empregado, enquanto que em Departamento temos dois.
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
4
ExemploExemplo
Relacionamentos BidirecionaisRelacionamentos Bidirecionais
DepartamentoDepartamento
sigla:sigla: nullnull
nome:nome: nullnull
DepartamentoDepartamento
sigla:sigla:
nome:nome:
StringString
“RH”“RH”
StringString
“Recursos “Recursos 
Humanos”Humanos”
StringString
“12345678“12345678--90”90”
StringString
EmpregadoEmpregado
cpf: cpf: 
nome:nome:
depto:depto:
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
listaEmpregados:listaEmpregados: nullnull
gerente:gerente: nullnull
listaEmpregados:listaEmpregados:
gerente:gerente:
Humanos”Humanos”
“José ”“José ”
nullnullnullnull
00 11 22 ...... 9999
StringString
“09876543“09876543--21”21”
StringString
“Maria”“Maria”
depto:depto:
EmpregadoEmpregado
cpf: cpf: 
nome:nome:
depto:depto:
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
5
Métodos para Estabelecer RelacionamentosMétodos para Estabelecer Relacionamentos
•• Além de colocarmos os atributos de relacionamento, Além de colocarmos os atributos de relacionamento, 
necessitamos colocar métodosnecessitamos colocar métodos que estarão estabelecendo os que estarão estabelecendo os 
relacionamento entre os objetos relacionamento entre os objetos e, conseqüentemente, e, conseqüentemente, 
manipulando os atributos de relacionamento. manipulando os atributos de relacionamento. 
•• Caso o Caso o relacionamento relacionamento seja seja unáriounário (ou seja, se o (ou seja, se o atributo de atributo de 
relacionamento relacionamento nãonão é uma coleçãoé uma coleção), deveremos colocar um ), deveremos colocar um 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
relacionamento relacionamento nãonão é uma coleçãoé uma coleção), deveremos colocar um ), deveremos colocar um 
método método set___set___..
•• Caso o Caso o relacionamentorelacionamento seja seja nn--árioário (ou seja, se o (ou seja, se o atributo de atributo de 
relacionamento é uma coleçãorelacionamento é uma coleção), deveremos colocar os ), deveremos colocar os métodos métodos 
add___add___ e e remove___remove___..
•• A implementação destes métodos deve levar em conta se o A implementação destes métodos deve levar em conta se o 
relacionamento é unidirecional ou bidirecional.relacionamento é unidirecional ou bidirecional.
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
6
Métodos para Estabelecer Métodos para Estabelecer 
Relacionamentos BidirecionaisRelacionamentos Bidirecionais
NA CLASSE EMPREGADONA CLASSE EMPREGADO
publicpublic voidvoid setDeptosetDepto((DepartamentoDepartamento depto)depto)
{{
// Se a referência para o departamento do Empregado é a mesma que// Se a referência para o departamento do Empregado é a mesma que
// está sendo recebida pelo parâmetro, não há necessidade de atualização//está sendo recebida pelo parâmetro, não há necessidade de atualização
ifif((thisthis.depto == depto).depto == depto)
returnreturn;;
// Se o parâmetro é // Se o parâmetro é nullnull, isto indica que o Empregado deve ser retirado, isto indica que o Empregado deve ser retirado
// do departamento.// do departamento.
ifif(depto == (depto == nullnull))
{{
Departamento Departamento antigo = antigo = thisthis.depto;.depto;
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
Departamento Departamento antigo = antigo = thisthis.depto;.depto;
// Apago a referência antiga// Apago a referência antiga
thisthis.depto = .depto = nullnull;;
// Solicito ao Departamento para retirar sua referência para o Empregado// Solicito ao Departamento para retirar sua referência para o Empregado
antigo.antigo.removeEmpregadoremoveEmpregado((thisthis); ); 
}}
elseelse
{{
// Se o Empregado já pertence a um Departamento, vou solicitar sua remoção para// Se o Empregado já pertence a um Departamento, vou solicitar sua remoção para
// colocá// colocá--lo em outro Departamento.lo em outro Departamento.
ifif((thisthis.depto != .depto != nullnull))
thisthis..depto.depto.removeEmpregadoremoveEmpregado((thisthis););
// Estabeleço a referência// Estabeleço a referência
thisthis.depto = depto;.depto = depto;
// solicito ao Departamento para adicionar uma referência para o Empregado.// solicito ao Departamento para adicionar uma referência para o Empregado.
deptodepto..addEmpregadoaddEmpregado((thisthis););
}}
}}
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
7
Métodos para Estabelecer Métodos para Estabelecer 
Relacionamentos BidirecionaisRelacionamentos Bidirecionais
NA CLASSE DEPARTAMENTONA CLASSE DEPARTAMENTO
publicpublic voidvoid addEmpregadoaddEmpregado((EmpregadoEmpregado novoEmpnovoEmp))
{{
// Se a referência para o Empregado já está presente na lista de// Se a referência para o Empregado já está presente na lista de
// Empregados do Departamento, não há necessidade de atualização// Empregados do Departamento, não há necessidade de atualização
ifif((thisthis..listaEmpregadoslistaEmpregados..containscontains((novoEmpnovoEmp))))
returnreturn;;
// Solicito ao objeto de coleção referenciado por // Solicito ao objeto de coleção referenciado por thisthis..listaEmpregadoslistaEmpregados
// que adicione uma referência para o novo empregado// que adicione uma referência para o novo empregado
thisthis..listaEmpregadoslistaEmpregados..addadd((novoEmpnovoEmp););
// Solicito ao Empregado que referencie o seu novo departamento// Solicito ao Empregado que referencie o seu novo departamento
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
// Solicito ao Empregado que referencie o seu novo departamento// Solicito ao Empregado que referencie o seu novo departamento
novoEmpnovoEmp..setDeptosetDepto((thisthis); ); 
}}
publicpublic voidvoid removeEmpregadoremoveEmpregado((EmpregadoEmpregado exEmpexEmp))
{{
// Se a referência para o Empregado não está presente na lista de// Se a referência para o Empregado não está presente na lista de
// Empregados do Departamento, não há necessidade de atualização// Empregados do Departamento, não há necessidade de atualização
ifif( ( !! thisthis..listaEmpregadoslistaEmpregados..containscontains((exEmpexEmp))))
returnreturn;;
// Solicito ao objeto de coleção referenciado por // Solicito ao objeto de coleção referenciado por thisthis..listaEmpregadoslistaEmpregados
// que remova a referência para o ex// que remova a referência para o ex--empregadoempregado
thisthis..listaEmpregadoslistaEmpregados..removeremove((exEmpexEmp););
// Solicito ao Empregado que deixe de referenciar o departamento// Solicito ao Empregado que deixe de referenciar o departamento
exEmpexEmp..setDeptosetDepto((nullnull); ); 
}}
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
8
Exemplo RelacionalExemplo Relacional
•• A idéia de A idéia de adicionarmos atributos para a implementação de adicionarmos atributos para a implementação de 
relacionamentos relacionamentos também ocorre com o uso do também ocorre com o uso do modelo modelo 
relacional relacional através do conceito de através do conceito de Chave EstrangeiraChave Estrangeira. . 
•• Lá, entretanto, não há a diferença entre relacionamentos Lá, entretanto, não há a diferença entre relacionamentos 
unidirecionais e bidirecionais.unidirecionais e bidirecionais.
•• Para descobrirmos dados entre as entidades relacionadas, nós Para descobrirmos dados entre as entidades relacionadas, nós 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- - •• Para descobrirmos dados entre as entidades relacionadas, nós Para descobrirmos dados entre as entidades relacionadas, nós 
necessitamos realizar operações de necessitamos realizar operações de JUNÇÃOJUNÇÃO..
sigla nome gerentegerente
JR Jurídico 901-2
LG Logística 123-4
DEPARTAMENTO
cpf nome deptodepto
123-4 José LG
567-8 Maria LG
901-2 Patrícia JR
345-6 João JR
EMPREGADO
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
9
Uma Forma de Execução da JunçãoUma Forma de Execução da Junção
SELECT D.Nome, E.Nome SELECT D.Nome, E.Nome (3º(3º-- projeção)projeção)
FROM Departamento D, Empregado E FROM Departamento D, Empregado E (1º(1º-- Prod.Cartesiano)Prod.Cartesiano)
WHERE D.gerente = E.Cpf WHERE D.gerente = E.Cpf (2º(2º-- Seleção)Seleção)
E.cpf E.nome E.deptoE.depto
123-4 José LG
D.sigla D.nome D.gerenteD.gerente
JR Jurídico 901-2
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- - 123-4 José LG
567-8 Maria LG
901-2 Patrícia JR
345-6 João JR
JR Jurídico 901-2
LG Logística 123-4
JR Jurídico 901-2
LG Logística 123-4
123-4 José LG
567-8 Maria LG
901-2 Patrícia JR
345-6 João JR
LG Logística 123-4
LG Logística 123-4
JR Jurídico 901-2
JR Jurídico 901-2
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
10
ColeçõesColeções
•• A implementação de atributos nA implementação de atributos n--ários com ários com arrays arrays não é adequada. não é adequada. 
(Arrays ou apresentam disperdício ou apresentam falta de posições de (Arrays ou apresentam disperdício ou apresentam falta de posições de 
memória).memória).
•• Uma idéia melhor é utilizar a classe Uma idéia melhor é utilizar a classe java.util.Vectorjava.util.Vector..
•• Comparação entre Array x VectorComparação entre Array x Vector
–– ArraysArrays
•• Tamanho fixo e definido na criação do array.Tamanho fixo e definido na criação do array.
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
•• Tamanho fixo e definido na criação do array.Tamanho fixo e definido na criação do array.
•• Procura pelo índice.Procura pelo índice.
•• Elementos do mesmo tipo.Elementos do mesmo tipo.
•• Arrays de tipos primitivos ou de ponteiros para instâncias de uma Arrays de tipos primitivosou de ponteiros para instâncias de uma 
classe específica.classe específica.
–– Objetos VectorObjetos Vector
•• O tamanho inicial é definido quando o vector é criado. Este pode ser O tamanho inicial é definido quando o vector é criado. Este pode ser 
modificado manualmente ou automaticamente.modificado manualmente ou automaticamente.
•• Procura pelo índice ou conteúdo.Procura pelo índice ou conteúdo.
•• Elementos de qualquer classe.Elementos de qualquer classe.
•• Vectors de ponteiros para instâncias de uma classe específicaVectors de ponteiros para instâncias de uma classe específica
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
11
ColeçõesColeções
public class Departamentopublic class Departamento
{{
private Stringprivate String sigla;sigla;
private Stringprivate String nome;nome;
private private VectorVector listaEmpregados;listaEmpregados;
private Empregado gerente;private Empregado gerente;
public Departamento(String sigla, String nome)public Departamento(String sigla, String nome)
{{
public class Empregadopublic class Empregado
{{
private Stringprivate String cpf;cpf;
private Stringprivate String nome;nome;
private Departamento depto;private Departamento depto;
public Empregado(String cpf, String nome, public Empregado(String cpf, String nome, 
Departamento depto)Departamento depto)
{{
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
{{
this.sigla = sigla;this.sigla = sigla;
this.nome = nome;this.nome = nome;
this.listaEmpregados = this.listaEmpregados = new Vector( );new Vector( );
}}
public void addEmpregado(Empregado novoEmp)public void addEmpregado(Empregado novoEmp)
{{
......
}}
public void removeEmpregado(Empregado exEmp)public void removeEmpregado(Empregado exEmp)
{{
......
}}
......
}}
{{
this.cpf = cpf;this.cpf = cpf;
this.nome = nome;this.nome = nome;
this.setDepto(depto);this.setDepto(depto);
}}
public void setDepto(Departamento depto)public void setDepto(Departamento depto)
{{
......
}}
......
}}
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
12
Exemplo com VectorExemplo com Vector
Relacionamentos Bidirecionais Relacionamentos Bidirecionais 
DepartamentoDepartamento
sigla:sigla: nullnull
nome:nome: nullnull
DepartamentoDepartamento
sigla:sigla:
nome:nome:
StringString
“RH”“RH”
StringString
“Recursos “Recursos 
Humanos”Humanos”
StringString
“12345678“12345678--90”90”
StringString
EmpregadoEmpregado
cpf: cpf: 
nome:nome:
depto:depto:
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
listaEmpregados:listaEmpregados: nullnull
gerente:gerente: nullnull
listaEmpregados:listaEmpregados:
gerente:gerente:
Humanos”Humanos”
“José ”“José ”
StringString
“09876543“09876543--21”21”
StringString
“Maria”“Maria”
depto:depto:
EmpregadoEmpregado
cpf: cpf: 
nome:nome:
depto:depto:
VectorVector
0
1
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
13
ColeçõesColeções
•• Alguns métodos úteis da classe Alguns métodos úteis da classe VectorVector::
–– VectorVector()()::Cria uma nova instância sem elementos e com capacidade Cria uma nova instância sem elementos e com capacidade 
inicial para 10 elementos.inicial para 10 elementos.
–– VectorVector((intint capacidade)capacidade): Cria uma nova instância sem elementos e : Cria uma nova instância sem elementos e 
com capacidade inicial especificada pelo parâmetro.com capacidade inicial especificada pelo parâmetro.
–– VectorVector((intint capacidade, capacidade, intint fator)fator): Cria uma nova instância : Cria uma nova instância 
sem elementos e com capacidade inicial / fator de crescimento sem elementos e com capacidade inicial / fator de crescimento 
especificados pelos parâmetros.especificados pelos parâmetros.
–– addadd((ObjectObject elem)elem): adiciona um objeto no final do : adiciona um objeto no final do VectorVector. . 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- - –– addadd((ObjectObject elem)elem): adiciona um objeto no final do : adiciona um objeto no final do VectorVector. . 
–– addadd((intint índice, índice, ObjectObject elemelem)): adiciona um objeto na posição : adiciona um objeto na posição 
especificada que deve estar entre 0 e o tamanho do especificada que deve estar entre 0 e o tamanho do VectorVector..
–– setElementAtsetElementAt((ObjectObject elem,elem,intint índice)índice): coloca o objeto em : coloca o objeto em 
determinada posição, removendo o objeto que estiver lá anteriormente.determinada posição, removendo o objeto que estiver lá anteriormente.
–– remove(remove(ObjectObject elem)elem): remove a primeira ocorrência do objeto no : remove a primeira ocorrência do objeto no 
VectorVector. Retorna . Retorna truetrue caso tenha sido possível a remoção.caso tenha sido possível a remoção.
–– remove (remove (intint índice)índice): remove o objeto na posição especificada.: remove o objeto na posição especificada.
–– sizesize()(): retorna o número de objetos presentes no : retorna o número de objetos presentes no VectorVector..
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
14
ColeçõesColeções
–– get(int índice)get(int índice): Retorna o objeto presente na posição especificada. : Retorna o objeto presente na posição especificada. 
–– firstElement()firstElement(): Retorna o objeto presente na primeira posição. : Retorna o objeto presente na primeira posição. 
–– lastElement()lastElement(): Retorna o objeto presente na última posição. : Retorna o objeto presente na última posição. 
–– indexOf(Object elem)indexOf(Object elem): retorna o índice da primeira ocorrência do : retorna o índice da primeira ocorrência do 
objeto no Vector ou objeto no Vector ou --1 se o objeto não estiver presente. 1 se o objeto não estiver presente. 
–– indexOf(Object elem,int índice)indexOf(Object elem,int índice): retorna o índice da primeira : retorna o índice da primeira 
ocorrência do objeto no Vector a partir da posição especificada. Retorna ocorrência do objeto no Vector a partir da posição especificada. Retorna --
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
ocorrência do objeto no Vector a partir da posição especificada. Retorna ocorrência do objeto no Vector a partir da posição especificada. Retorna --
1 se o objeto estiver presente. 1 se o objeto estiver presente. 
–– lastIndexOf(Object elem)lastIndexOf(Object elem): retorna o índice da última ocorrência do : retorna o índice da última ocorrência do 
objeto no Vector ou objeto no Vector ou --1 se o objeto não estiver presente. 1 se o objeto não estiver presente. 
–– lastIndexOf(Object elem,int índice)lastIndexOf(Object elem,int índice): retorna o índice da última : retorna o índice da última 
ocorrência do objeto no Vector a partir da posição especificada. Retorna ocorrência do objeto no Vector a partir da posição especificada. Retorna 
--1 se o objeto estiver presente. 1 se o objeto estiver presente. 
–– contains(Object elem)contains(Object elem): Informa se o objeto está presente no : Informa se o objeto está presente no 
Vector.Vector.
1
7
/
0
8/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
15
Coleções no JDK 1.2Coleções no JDK 1.2
•• Com o advento do Com o advento do jdkjdk 1.21.2, , A classe A classe VectorVector está sendo está sendo 
evitadaevitada pois os seus métodos são pois os seus métodos são synchronizedsynchronized (não (não 
permite acesso concorrente aos dados do permite acesso concorrente aos dados do VectorVector).).
•• A estrutura das classes de coleção A estrutura das classes de coleção (pacote (pacote javajava..utilutil)) está está 
colocada da seguinte forma:colocada da seguinte forma:
ObjectObject
CollectionCollection
InterfaceInterface
ClasseClasse
EspecializaçãoEspecialização
RealizaçãoRealização
LegendaLegenda
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
LinkedListLinkedList
ArrayListArrayList
Abstract Abstract 
SequentialSequential
ListList
SetSet
SortedSetSortedSet
ListList
TreeSetTreeSet
AbstractAbstract
CollectionCollection
Abstract Abstract 
ListList
VectorVector
Abstract Abstract 
SetSet
HashSetHashSet
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
16
Conceito de InterfaceConceito de Interface
•• Em Java e na UML, uma Em Java e na UML, uma InterfaceInterface::
–– Se assemelha a uma Se assemelha a uma classe abstrataclasse abstrata
–– Não apresenta atributosNão apresenta atributos (somente constantes)(somente constantes)
–– Não apresenta códigoNão apresenta código para os seus métodospara os seus métodos**
–– Possui somente as assinaturas dos métodosPossui somente as assinaturas dos métodos que deverão que deverão 
ser codificados pelas classes que implementarem a ser codificados pelas classes que implementarem a 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
ser codificados pelas classes que implementarem a ser codificados pelas classes que implementarem a 
interface.interface.**
•• Obs*Obs* -- Se um método não apresenta código é só possui a sua assinatura, Se um método não apresenta código é só possui a sua assinatura, 
então ele é um então ele é um método abstratométodo abstrato..
•• Uma interface pode ser vista como a especificação Uma interface pode ser vista como a especificação 
de um de um serviçoserviço que pode ser que pode ser realizadorealizado por uma ou mais por uma ou mais 
classes.classes.
•• Geralmente optaGeralmente opta--se por uma interface (e não por uma classe se por uma interface (e não por uma classe 
abstrata) quando não se sabe como implementar o serviço ou abstrata) quando não se sabe como implementar o serviço ou 
quando o serviço pode ser implementado de várias maneiras.quando o serviço pode ser implementado de várias maneiras.
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
17
Conceito de InterfaceConceito de Interface
•• RealizaçãoRealização
–– Relacionamento definido na UML e em Java que indica Relacionamento definido na UML e em Java que indica 
que uma determinada que uma determinada classeclasse irá realizar irá realizar o o serviço serviço 
especificado por uma especificado por uma interfaceinterface. Em Java costumamos . Em Java costumamos 
popularmente chamar a realização de popularmente chamar a realização de implementaçãoimplementação..
–– RealizarRealizar (ou (ou implementarimplementar) uma interface significa que ) uma interface significa que a a 
Set
<<interface>>
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
–– RealizarRealizar (ou (ou implementarimplementar) uma interface significa que ) uma interface significa que a a 
classe deverá implementar todos os métodos assinados classe deverá implementar todos os métodos assinados 
na interfacena interface. Se algum método ficar de fora, o . Se algum método ficar de fora, o 
compilador irá considerar a compilador irá considerar a classe abstrataclasse abstrata..
–– Uma classe pode implementar quantas interfaces Uma classe pode implementar quantas interfaces 
quiser.quiser.
–– O conceito de polimorfismo se aplica aos objetos de O conceito de polimorfismo se aplica aos objetos de 
uma classe que implementam uma interface uma classe que implementam uma interface 
–– Ex:Ex:
public class public class HashSetHashSet implementsimplements Set Set { ... }{ ... }
Assim objetos Assim objetos HashSetHashSet também podem ser vistos como objetos também podem ser vistos como objetos SetSet
HashSet
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
18
Interface e RealizaçãoInterface e Realização
ExemploExemplo
�� produzproduz
LimpadorLimpador
limpar()limpar()
<<interface>><<interface>>
FábricaFábrica
1..*1..* 11
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
LavaLava--JatoJato
limpar()limpar()
Aspirador de PóAspirador de Pó
limpar()limpar()
Limpador deLimpador de
PáraPára--brisabrisa
limpar()limpar()
LavaLava--RoupasRoupas
limpar()limpar()
LavaLava--LouçaLouça
limpar()limpar()
OBS: É melhor deixar Limpador como Interface pois esta apresenta todas as características de umaOBS: É melhor deixar Limpador como Interface pois esta apresenta todas as características de uma
interface e assim estamos livres para deixar as classes que implementam esta interface como interface e assim estamos livres para deixar as classes que implementam esta interface como 
especializações de uma outra classe (ex. Equipamento Elétrico). Lembreespecializações de uma outra classe (ex. Equipamento Elétrico). Lembre--se que em Java uma classe se que em Java uma classe 
só pode ser especialização direta de uma outra classe!só pode ser especialização direta de uma outra classe!
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
19
Interface e RealizaçãoInterface e Realização
ExemploExemplo
•• Objetos Objetos LavaLava--JatoJato, , Aspirador de PóAspirador de Pó, , Limpador de PáraLimpador de Pára--BrisaBrisa, , LavaLava--
RoupasRoupas e e LavaLava--LouçaLouça apresentam algumas propriedades em comum. apresentam algumas propriedades em comum. 
Todas são equipamentos produzidos por uma fábricaTodas são equipamentos produzidos por uma fábrica e que e que realizam o realizam o 
serviçoserviço de limpezade limpeza. Suponha que a execução da limpeza seja executada . Suponha que a execução da limpeza seja executada 
através do método através do método limpar()limpar()..
•• Para caracterizar que estas classes são limpadores, poderíamos criar Para caracterizar que estas classes são limpadores, poderíamos criar 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- - •• Para caracterizar que estas classes são limpadores, poderíamos criar Para caracterizar que estas classes são limpadores, poderíamos criar 
uma uma classe abstrataclasse abstrata chamada chamada LimpadorLimpador com uma com uma associação com associação com 
FábricaFábrica e e apresentando o método apresentando o método limpar()limpar()..
•• Entretanto, observe que a supostaclasse Entretanto, observe que a suposta classe Limpador não apresentaria Limpador não apresentaria 
atributosatributos e e seu único método é abstratoseu único método é abstrato (a forma como cada classe irá (a forma como cada classe irá 
implementar o método limpar() é diferente e não conseguimos produzir implementar o método limpar() é diferente e não conseguimos produzir 
uma implementação que valha para todas as suas especializações).uma implementação que valha para todas as suas especializações).
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
20
Interface e RealizaçãoInterface e Realização
ExemploExemplo
•• Assim, Assim, é melhor caracterizar a classe Limpador como interfaceé melhor caracterizar a classe Limpador como interface pois pois 
apresenta todas as características da mesma e, assim, permitimos que apresenta todas as características da mesma e, assim, permitimos que 
as suas realizações possam ser especializações de uma outra classe as suas realizações possam ser especializações de uma outra classe 
(lembre(lembre--se que em Java não há herança múltipla).se que em Java não há herança múltipla).
•• Contudo, observe que Contudo, observe que na realização há a presença da característica do na realização há a presença da característica do 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
•• Contudo, observe que Contudo, observe que na realização há a presença da característica do na realização há a presença da característica do 
polimorfismopolimorfismo; pois os objetos ; pois os objetos FábricaFábrica vêem os objetos vêem os objetos LavaLava--JatoJato, , 
Aspirador de PóAspirador de Pó, , Limpador de PáraLimpador de Pára--BrisaBrisa, , LavaLava--RoupasRoupas e e LavaLava--LouçaLouça
como como objetos da interface Limpadorobjetos da interface Limpador..
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
21
Interface e RealizaçãoInterface e Realização
Exemplo Exemplo (talvez um pouco mais lúdico)(talvez um pouco mais lúdico)
CarrascoCarrasco
torturar()torturar()
<<interface>><<interface>>
PessoaPessoa
ChoradorChorador
chorar()chorar()
<<interface>><<interface>>
cpfcpf
nomenome
endereçoendereço
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
PolíticoPolítico
chorar()chorar()
AlunoAluno
chorar()chorar()
TerroristaTerrorista
torturar()torturar()
ProfessorProfessor
torturar()torturar()
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
22
Codificando...Codificando...
public public interfaceinterface CarrascoCarrasco
{{
publicpublic voidvoid torturartorturar();();
}}
publicpublic classclass ProfessorProfessor extendsextends PessoaPessoa implementsimplements CarrascoCarrasco
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
publicpublic classclass ProfessorProfessor extendsextends PessoaPessoa implementsimplements CarrascoCarrasco
{{
......
publicpublic voidvoid torturartorturar()()
{{
SystemSystem..out.printlnout.println((“Se não estudar, vou te reprovar!!!!”“Se não estudar, vou te reprovar!!!!”););
}}
......
}}
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
23
Coleções no JDK 1.2Coleções no JDK 1.2
•• Interface Interface CollectionCollection
–– Uma Uma collection collection representa um serviço capaz de apontar para representa um serviço capaz de apontar para 
um um conjunto de objetosconjunto de objetos que que não estão necessariamentenão estão necessariamente
postos em uma ordem de posição arbitrada pelo postos em uma ordem de posição arbitrada pelo 
programadorprogramador e que e que pode apresentar duplicaçõespode apresentar duplicações..
–– Métodos ImportantesMétodos Importantes::
boolean boolean addadd(Object o) (Object o) boolean boolean addAlladdAll(Collection c)(Collection c)
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
boolean boolean addadd(Object o) (Object o) boolean boolean addAlladdAll(Collection c)(Collection c)
void void clearclear()() boolean boolean containscontains(Object o)(Object o)
Iterator Iterator iteratoriterator()() boolean boolean removeremove(Object o )(Object o )
boolean boolean removeAllremoveAll(Collection c)(Collection c) int int sizesize()()
•• Classe Abstrata Classe Abstrata AbstractCollectionAbstractCollection
–– Superclasse de todas as coleções.Superclasse de todas as coleções.
–– É uma classe abstrata pois na realidade não implementa os É uma classe abstrata pois na realidade não implementa os 
métodos previstos na interface Collection.métodos previstos na interface Collection.
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
24
Coleções no JDK 1.2Coleções no JDK 1.2
•• Interface Interface ListList
–– Especialização de Collection; Uma lista representa um serviço capaz Especialização de Collection; Uma lista representa um serviço capaz 
de apontar para de apontar para um conjunto de objetos um conjunto de objetos que que estão colocados em estão colocados em 
uma ordem de posição arbitrada pelo programadoruma ordem de posição arbitrada pelo programador e que e que pode pode 
apresentar duplicação de elementosapresentar duplicação de elementos. . 
–– Assim, o programador determinar que elemento ficará na posição 0, Assim, o programador determinar que elemento ficará na posição 0, 
na posição 1, etc.na posição 1, etc.
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
na posição 1, etc.na posição 1, etc.
–– Métodos ImportantesMétodos Importantes::
Object Object getget(int posicao) (int posicao) int int indexOfindexOf(Object o)(Object o)
void void addadd(int posicao, Object o)(int posicao, Object o) boolean boolean containscontains(Object o)(Object o)
Object Object setset(int posicao, Object o) List (int posicao, Object o) List subListsubList(int inicio, int fim)(int inicio, int fim)
�� Além dos métodos de Além dos métodos de CollectionCollection
•• Classe Abstrata Classe Abstrata AbstractListAbstractList
–– Superclasse para as listas.Superclasse para as listas.
–– É uma classe abstrata pois não implementa os métodos da interfaceÉ uma classe abstrata pois não implementa os métodos da interface
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
25
Coleções do JDK 1.2Coleções do JDK 1.2
•• Classe Classe ArrayListArrayList
–– Implementação (ou realização) da interface Implementação (ou realização) da interface ListList..
–– Seu comportamento está baseado em possuir um Seu comportamento está baseado em possuir um arrayarray de de 
referências para referências para ObjectObject que aponta para os elementos da lista. que aponta para os elementos da lista. 
–– Se o tamanho do Se o tamanho do arrayarray for insuficiente: for insuficiente: 
•• CriaCria--se um novo se um novo arrayarray com o tamanho maior;com o tamanho maior;
•• CopiaCopia--se o conteúdo do antigo se o conteúdo do antigo arrayarray para o novo;para o novo; 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- - •• CopiaCopia--se o conteúdo do antigo se o conteúdo do antigo arrayarray para o novo; para o novo; 
•• DescartaDescarta--se o antigo (sofrerá o se o antigo (sofrerá o GarbageGarbage CollectionCollection).).
–– Bom para recuperação aleatória por posição; “Ruim” para inserção Bom para recuperação aleatória por posição; “Ruim” para inserção 
se realizar o redimensionamento do se realizar o redimensionamento do arrayarray a cada instante.a cada instante.
–– Para melhorar o desempenho, podemos utilizar o método Para melhorar o desempenho, podemos utilizar o método 
ensureCapacityensureCapacity(tamanho)(tamanho)
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
26
Coleções do JDK 1.2Coleções do JDK 1.2
•• Classe Classe LinkedListLinkedList
–– Seu comportamento está baseado em implementar Seu comportamento está baseado em implementar 
uma uma lista encadeadalista encadeada
–– Bom para inserção; “Ruim” para recuperação aleatória Bom para inserção; “Ruim” para recuperação aleatória 
por posição já que há a necessidade de navegação pela por posição já que há a necessidade de navegação pela 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- - por posição já que há a necessidade de navegação pela por posição já que há a necessidade de navegação pela 
lista. Entretanto, se a recuperação for iterativa (ou lista. Entretanto, se a recuperação for iterativa (ou 
seja, posição a posição) não há problemas. seja, posição a posição) não há problemas. 
•• Classe VectorClasse Vector
–– Comportamento igual ao do ArrayList porém o Vector é Comportamento igual ao do ArrayList porém o Vector é 
synchronizedsynchronized; ou seja, não permite acesso concorrente.; ou seja, não permite acesso concorrente.
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
27
IteratorIterator
•• Objeto que permite a recuperação seqüencial dos Objeto que permite a recuperação seqüencial dos 
elementos de uma coleção.elementos de uma coleção.
CollectionCollection colecao;colecao;
......
forfor((IteratorIterator it = colecao.it = colecao.iterator()iterator(); it.; it.hasNext()hasNext(); ); )
{{
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
{{
<Classe><Classe> elemento = (elemento = (<Classe><Classe>)it.)it.next()next();;
......
}}
–– Métodos ImportantesMétodos Importantes::
boolean boolean hasNexthasNext( ) ( ) �� Informa se o iterator ainda pode retornar algum Informa se o iterator ainda pode retornar algum 
elementoelemento
Object Object nextnext() () �� Retorna o próximo elemento da iteraçãoRetorna o próximo elemento da iteração
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
28
Coleções no JDK 1.2Coleções no JDK 1.2
•• Interface SetInterface Set
–– Especialização de Especialização de CollectionCollection; Um set representa um serviço capaz ; Um set representa um serviço capaz 
de apontar para de apontar para um conjunto de objetos um conjunto de objetos que que não estão não estão 
necessariamente colocados em uma ordem de posição arbitrada necessariamente colocados em uma ordem de posição arbitrada 
pelo programadorpelo programador e que e que não não permite a duplicação de elementospermite a duplicação de elementos. . 
–– Métodos ImportantesMétodos Importantes::
Os mesmos de Os mesmos de CollectionCollection..
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
Os mesmos de Os mesmos de CollectionCollection..
•• Classe Classe HashSetHashSet
–– Implementação de Set. Para isto, utiliza internamente uma Implementação de Set. Para isto, utiliza internamente uma 
HashMapHashMap..
–– Métodos ImportantesMétodos Importantes::
HashSetHashSet((intint capacidadeInicialcapacidadeInicial))
HashSetHashSet((intint capacidadeInicialcapacidadeInicial, , floatfloat fatorDeCargafatorDeCarga))
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
29
Coleções no JDK 1.2Coleções no JDK 1.2
•• Interface Interface SortedSetSortedSet
–– Especialização de Especialização de SetSet; Um ; Um SortedSetSortedSet representa um serviço capaz de representa um serviço capaz de 
apontar para apontar para um conjunto de objetos sem duplicações um conjunto de objetos sem duplicações cujos elementos cujos elementos 
estão dispostos ordenadamenteestão dispostos ordenadamente segundo algum critério especificado. segundo algum critério especificado. 
–– Para viabilizar a ordenação, é necessário que o Para viabilizar a ordenação, é necessário que o SortedSetSortedSet saiba o saiba o critério critério 
para ordenaçãopara ordenação. Para especificação do critério, devemos fazer com que os . Para especificação do critério, devemos fazer com que os 
elementos do elementos do SortedSetSortedSet implementem a interface implementem a interface ComparableComparable ouou
passarmos para o passarmos para o SortedSetSortedSet um objeto que implemente a interface um objeto que implemente a interface 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
passarmos para o passarmos para o SortedSetSortedSet um objeto que implemente a interface um objeto que implemente a interface 
ComparatorComparator..
–– Métodos ImportantesMétodos Importantes::
Os mesmos de Os mesmos de SetSet..
•• Classe Classe TreeSetTreeSet
–– Implementa um Implementa um SortedSetSortedSet cuja complexidade de ordenação é cuja complexidade de ordenação é LogLog(n) (n) 
–– Métodos ImportantesMétodos Importantes::
TreeSetTreeSet( ) ( ) �� Os elementos deverão implementar Os elementos deverão implementar ComparableComparable
TreeSetTreeSet((ComparatorComparator comparador) comparador) �� Utiliza um comparador para Utiliza um comparador para 
estabelecer a ordemestabelecer a ordem
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
30
ComparableComparable
•• Se ao criar um TreeSet não indicamos umSe ao criar um TreeSet não indicamos um ComparatorComparator, ele , ele 
considerará que as classes de seus elementos implementam a considerará que as classes de seus elementos implementam a 
interface interface Comparable.Comparable.
–– Interface ComparableInterface Comparable
•• int compareTo(Object o)int compareTo(Object o)
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
–– Se o objeto que receber a mensagem (Se o objeto que receber a mensagem (thisthis) é ) é igualigual ao ao 
objeto recebido como parâmetro, então o método deve objeto recebido como parâmetro, então o método deve 
retornar 0 (Zero)retornar 0 (Zero)
–– Se o objeto que receber a mensagem (Se o objeto que receber a mensagem (thisthis) ) vem primeirovem primeiroque o objeto recebido como parâmetro, então o método que o objeto recebido como parâmetro, então o método 
deve retornar um deve retornar um número negativonúmero negativo..
–– Se o objeto que receber a mensagem Se o objeto que receber a mensagem (this(this) ) vem depoisvem depois
que o objeto recebido como parâmetro, então o método que o objeto recebido como parâmetro, então o método 
deve retornar um deve retornar um número positivonúmero positivo..
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
31
ComparableComparable
•• Exemplo de Comparação com StringsExemplo de Comparação com Strings
publicpublic classclass EmpregadoEmpregado implementsimplements ComparableComparable
{{
privateprivate StringString nomenome; ; 
......
publicpublic intint compareTocompareTo((ObjectObject oo))
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- - publicpublic intint compareTocompareTo((ObjectObject oo))
{{
ifif((oo instanceofinstanceof EmpregadoEmpregado))
{{
EmpregadoEmpregado ee = = (Empregado)(Empregado)oo;;
returnreturn thisthis..nomenome..compareTocompareTo((ee..nomenome););
}}
returnreturn ––11;;
}}
}}
A classe String também é uma realização de A classe String também é uma realização de ComparableComparable!!
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
32
ComparableComparable
•• Exemplo de Comparação NuméricaExemplo de Comparação Numérica
public classpublic class EmpregadoEmpregado implements implements ComparableComparable
{{
private private intint idadeidade; ; 
......
public public intint compareTocompareTo((ObjectObject oo))
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
public public intint compareTocompareTo((ObjectObject oo))
{{
if(if(oo instanceofinstanceof EmpregadoEmpregado))
{{
EmpregadoEmpregado ee = = (Empregado)(Empregado)oo;;
return return this.this.idade idade -- ee..idadeidade;;
}}
return return ––11;;
}}
}}
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
33
Erros Vinculados à Erros Vinculados à 
implementação do Comparableimplementação do Comparable
•• Se em uma classe colocarmos a indicação Se em uma classe colocarmos a indicação 
“implements Comparable”“implements Comparable” mas não adicionarmos mas não adicionarmos 
o método o método “compareTo”“compareTo”, o compilador acusará , o compilador acusará erroerro..
•• Da mesma forma, não adianta colocar o método Da mesma forma, não adianta colocar o método 
“compareTo”“compareTo” e não colocarmos a indicação e não colocarmos a indicação 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
“compareTo”“compareTo” e não colocarmos a indicação e não colocarmos a indicação 
“implements Comparable”“implements Comparable”, pois quando o , pois quando o 
TreeSetTreeSet utiliza o critério do utiliza o critério do ComparableComparable, ele só , ele só 
permite que sejam adicionados Objetos que sejam permite que sejam adicionados Objetos que sejam 
ComparableComparable. . Assim, este erro só será percebido em Assim, este erro só será percebido em 
tempo de execuçãotempo de execução..
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
34
ComparatorComparator
•• Se ao criar um TreeSet passamos um Comparator, este Se ao criar um TreeSet passamos um Comparator, este 
determinará a ordem dos elementos utilizando o método determinará a ordem dos elementos utilizando o método 
comparecompare..
–– Interface ComparatorInterface Comparator
•• int compare(Object o1, Object o2)int compare(Object o1, Object o2)
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- - •• int compare(Object o1, Object o2)int compare(Object o1, Object o2)
–– Se o objeto apontado por Se o objeto apontado por o1o1 é é igualigual ao objeto apontado ao objeto apontado 
por por o2o2, então o método deve retornar 0 (Zero), então o método deve retornar 0 (Zero)
–– Se o objeto apontado por Se o objeto apontado por o1o1 vem primeirovem primeiro que o objeto que o objeto 
apontado por apontado por o2o2, então o método deve retornar um , então o método deve retornar um 
número negativonúmero negativo..
–– Se o objeto apontado por Se o objeto apontado por o1o1 vem depoisvem depois que o objeto que o objeto 
apontado por apontado por o2o2, então o método deve retornar um , então o método deve retornar um 
número positivonúmero positivo..
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
35
ComparatorComparator
•• Exemplo de ComparatorExemplo de Comparator
public class ComparadorPorNome public class ComparadorPorNome implements Comparatorimplements Comparator
{{
public int compare(Object public int compare(Object o1o1,, Object Object o2o2))
{{
if(if(o1o1 instanceofinstanceof Empregado && Empregado && 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
if(if(o1o1 instanceofinstanceof Empregado && Empregado && 
o2o2 instanceofinstanceof Empregado)Empregado)
{{
Empregado Empregado e1e1 = = (Empregado)(Empregado)o1o1;;
Empregado Empregado e2e2 = = (Empregado)(Empregado)o2o2;;
return return e1.getNome()e1.getNome()..compareTocompareTo((e2.getNome()e2.getNome()););
}}
return return ––1;1;
}}
}}
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
36
Classe Classe CollectionsCollections
•• É uma classe que contém vários métodos estáticos que fazem a É uma classe que contém vários métodos estáticos que fazem a 
manipulação dos objetos de coleção.manipulação dos objetos de coleção.
–– Métodos ImportantesMétodos Importantes::
staticstatic voidvoid copycopy((ListList l1, l1, ListList l2) l2) 
staticstatic voidvoid reversereverse((ListList l)l)
staticstatic voidvoid sortsort((ListList l) l) 
staticstatic voidvoid sortsort((ListList l, l, ComparatorComparator cmpcmp) ) 
staticstatic CollectionCollection unmodifiableCollectionunmodifiableCollection((CollectionCollection c) c) 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
staticstatic CollectionCollection unmodifiableCollectionunmodifiableCollection((CollectionCollection c) c) 
staticstatic ListList unmodifiableListunmodifiableList((ListList c) c) 
staticstatic CollectionCollection synchronizedCollectionsynchronizedCollection((CollectionCollection c) c) 
staticstatic ListList synchronizedListsynchronizedList((ListList c) c) 
Exemplo:Exemplo:
ArrayListArrayList lista = lista = newnew ArrayListArrayList();();
......
CollectionsCollections..sortsort(lista); (lista); // Promoverá a ordenação da lista através de // Promoverá a ordenação da lista através de ComparableComparable´´ss
•• Coleções Coleções SynchronizedSynchronized
–– São aquelas que só podem ser manipuladas poruma única Thread a cada São aquelas que só podem ser manipuladas por uma única Thread a cada 
instante. A única exceção é a recuperação via instante. A única exceção é a recuperação via iteratoriterator..
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
37
Operador Operador instanceofinstanceof
•• Se quisermos Se quisermos testartestar um atributo ou variável local declarado um atributo ou variável local declarado 
como como ponteiro para um objeto de uma superclasseponteiro para um objeto de uma superclasse está está 
propriamente propriamente apontando para um objeto de uma de suas apontando para um objeto de uma de suas 
subclassessubclasses, devemos utilizar o operador , devemos utilizar o operador instanceofinstanceof..
// Elemento foi declarado como ponteiro para um // Elemento foi declarado como ponteiro para um 
// objeto da classe Object// objeto da classe Object
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- - // objeto da classe Object// objeto da classe Object
Object elemento = coleção.Object elemento = coleção.getget(posição); (posição); 
// Para sabermos se elemento na realidade está apontando// Para sabermos se elemento na realidade está apontando
// para um objeto da classe String (subclasse), devemos// para um objeto da classe String (subclasse), devemos
// utilizar o operador instanceof// utilizar o operador instanceof
if(elemento if(elemento instanceofinstanceof String) String) 
{ { 
... ... 
}}
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
38
CastingCasting e instanceofe instanceof
•• Observe que nos códigos exibidos temos a presença da seguinte linha:Observe que nos códigos exibidos temos a presença da seguinte linha:
Empregado Empregado ee = = (Empregado)(Empregado)oo;;
•• Por que há a necessidade de colocarmos Por que há a necessidade de colocarmos (Empregado)(Empregado)??
•• Java é uma Java é uma linguagem fortemente tipadalinguagem fortemente tipada!!
–– Há Há intensa verificação dos tiposintensa verificação dos tipos feita pelo compilador nas operações que feita pelo compilador nas operações que 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
–– Há Há intensa verificação dos tiposintensa verificação dos tipos feita pelo compilador nas operações que feita pelo compilador nas operações que 
codificamos. codificamos. 
–– No caso de atribuições, No caso de atribuições, o compilador verificará se o tipo à direita é o compilador verificará se o tipo à direita é igual igual 
ou compatívelou compatível com o tipo à esquerdacom o tipo à esquerda
•• Ex: Ex: int a = false;int a = false;// O tipo à direita (boolean) não é igual nem // O tipo à direita (boolean) não é igual nem 
// compatível com o tipo à esquerda (int)// compatível com o tipo à esquerda (int)
–– A verificação também é feita na A verificação também é feita na passagem de parâmetrospassagem de parâmetros ((o tipo do o tipo do 
parâmetro deve ser parâmetro deve ser igual ou compatíveligual ou compatível com o especificado no com o especificado no 
métodométodo).).
•• Observe que no código, o tipo de Observe que no código, o tipo de oo (elemento à direita) é “(elemento à direita) é “ponteiro ponteiro 
para um objeto da classe Objectpara um objeto da classe Object” e o tipo de ” e o tipo de ee (elemento à esquerda) (elemento à esquerda) 
é “é “ponteiro para um objeto da classe Empregadoponteiro para um objeto da classe Empregado”. ”. 
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
39
CastingCasting e instanceofe instanceof
•• (Continuação(Continuação)) Neste caso, Neste caso, o tipo à direita não é igual nem compatível com o o tipo à direita não é igual nem compatível com o 
tipo à esquerdatipo à esquerda (nem sempre um ponteiro para Object está (nem sempre um ponteiro para Object está 
apontando para um Empregado).apontando para um Empregado).
•• Mas, por causa do teste realizado previamente com o Mas, por causa do teste realizado previamente com o instanceofinstanceof, , 
sabemos que sabemos que oo ((ponteiro para Objectponteiro para Object) aponta para um ) aponta para um objeto objeto 
EmpregadoEmpregado..
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
EmpregadoEmpregado..
•• Para o compilador não reclamar da operação (Para o compilador não reclamar da operação (Type Mismatch Type Mismatch –– tipo tipo 
incompatívelincompatível), ), devemos solicitar que ele veja devemos solicitar que ele veja somente neste instantesomente neste instante
o ponteiro para Object como ponteiro para Empregadoo ponteiro para Object como ponteiro para Empregado. A esta . A esta 
operação denominamos de operação denominamos de castingcasting..
•• Se por acaso Se por acaso oo não estivesse apontando para um Empregado, a JVM não estivesse apontando para um Empregado, a JVM 
lançaria uma exceção chamada lançaria uma exceção chamada ClassCastExceptionClassCastException que abortaria a que abortaria a 
execução do programa.execução do programa.
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
40
CastingCasting e instanceofe instanceof
•• Sempre precisaremos de indicar um casting na recuperação de elementos, pois Sempre precisaremos de indicar um casting na recuperação de elementos, pois 
todos os métodos de recuperação foram codificados para retornar uma referência todos os métodos de recuperação foram codificados para retornar uma referência 
para para ObjectObject. Porém, na maioria das vezes, sabemos que eles pertencem a uma . Porém, na maioria das vezes, sabemos que eles pertencem a uma 
especialização de especialização de ObjectObject..
•• Observe o seguinte caso:Observe o seguinte caso:
String str = coleção.get(posição);String str = coleção.get(posição);
ptr para String ptr para Objectptr para String ptr para Object
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- - ptr para String ptr para Objectptr para String ptr para Object
•• O compilador irá acusar erro pois o tipo à direita não é igual nem compatível com O compilador irá acusar erro pois o tipo à direita não é igual nem compatível com 
o tipo à esquerda. Mas se soubermos que o tipo à esquerda. Mas se soubermos que Coleção.get(posição)Coleção.get(posição) sempre retornará sempre retornará 
uma String, devemos avisar isto para o compilador através de um uma String, devemos avisar isto para o compilador através de um Casting.Casting.
String str = String str = (String)(String) coleção.get(posição);coleção.get(posição);
•• Dica para o uso doDica para o uso do casting casting em atribuiçõesem atribuições
–– Se o tipo da direita Se o tipo da direita não é igual ou compatívelnão é igual ou compatível com o tipo da com o tipo da 
esquerda, deveremos utilizar o Casting. esquerda, deveremos utilizar o Casting. 
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
41
Coleções no JDK 1.2Coleções no JDK 1.2
•• Classe HashtableClasse Hashtable
–– Não Não está vinculada a interface está vinculada a interface Collection Collection (implementa (implementa 
na realidade a na realidade a interfaceinterface MapMap))
–– Funciona como uma tabela Hash. Para adicionarmos Funciona como uma tabela Hash. Para adicionarmos 
um elemento, temos que vincular a ele uma chave de um elemento, temos que vincular a ele uma chave de 
indexação que é utilizada para a recuperação. indexação que é utilizada para a recuperação. 
•• public void public void putput(Object chave, Object elemento)(Object chave, Object elemento)
MapMap
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
•• public void public void putput(Object chave, Object elemento)(Object chave, Object elemento)
–– Insere um elemento no Hashtable indexandoInsere um elemento no Hashtable indexando--o o 
pela chave passada. pela chave passada. 
•• public Object public Object getget(Object chave)(Object chave)
–– Recupera o elemento indexado no Hashtable pela Recupera o elemento indexado no Hashtable pela 
chave fornecida.chave fornecida.
–– A posição de um elemento é determinada por sua A posição de um elemento é determinada por sua 
função hashfunção hash. Em Java, todo objeto possui o método . Em Java, todo objeto possui o método 
hashCodehashCode() e este é utilizado como função hash.() e este é utilizado como função hash.
–– Como Hashtable é Como Hashtable é synchronizedsynchronized, é melhor utilizar a , é melhor utilizar a 
classe classe HashMapHashMap..
HashtableHashtable
DictionaryDictionary
HashMapHashMap
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
42
Coleções no JDK 1.2Coleções no JDK 1.2
–– Outros Métodos Importantes de HashtableOutros Métodos Importantes de Hashtable::
HashtableHashtable()()
HashtableHashtable(int capacidadeInicial)(int capacidadeInicial)
HashtableHashtable(int capacidadeInicial, float fatorDeCarga)(int capacidadeInicial, float fatorDeCarga)
boolean boolean containsValuecontainsValue(Object o) (Object o) 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
boolean boolean containsKeycontainsKey(Object o)(Object o)
Set Set keySetkeySet()()
Collection Collection valuesvalues()()
Object Object removeremove(Object key(Object key))
–– HashtableHashtable é uma classe synchronized. Prefira a é uma classe synchronized. Prefira a 
classe classe HashMapHashMap..
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
43
HashtableHashtable
ExemploExemplo
•• Se enviarmos a mensagem get(“12345678Se enviarmos a mensagem get(“12345678--90”) para o 90”) para o 
Hashtable, ele nos dará uma referência para o objeto Hashtable, ele nos dará uma referência para o objeto 
Empregado “José”.Empregado “José”.
StringString
“12345678“12345678--90”90”
StringString
EmpregadoEmpregado
cpf: cpf: 
nome:nome:
depto:depto:
HashtableHashtable
tabela:tabela:
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
“José ”“José ”
depto:depto:
ChavesChaves ObjetosObjetos
StringString
“12345678“12345678--90”90”
StringString
“09876543“09876543--21”21”
StringString
“09876543“09876543--21”21”
StringString
“Maria”“Maria”
EmpregadoEmpregado
cpf: cpf: 
nome:nome:
depto:depto:
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
44
ColeçõesColeções
Implementando Classes de AssociaçãoImplementando Classes de Associação
•• Devemos substituir a modelagem proposta pela implementação Devemos substituir a modelagem proposta pela implementação 
de duas associações ligando a classe de associação com as de duas associações ligando a classe de associação com as 
classes envolvidas no relacionamento. classes envolvidas no relacionamento. 
•• No exemplo abaixo, apesar de termos modelado a associação No exemplo abaixo, apesar de termos modelado a associação 
““Envolve a Venda deEnvolve a Venda de”, vamos substitui”, vamos substitui--la pelas associações em la pelas associações em 
vermelho. vermelho. Observe que as cardinalidades das extremidades são Observe que as cardinalidades das extremidades são 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
vermelho. vermelho. Observe que as cardinalidades das extremidades são Observe que as cardinalidades das extremidades são 
unárias e que as cardinalidades na classe de associação são unárias e que as cardinalidades na classe de associação são 
trocadas em relação ao que existia antes (em azul)trocadas em relação ao que existia antes (em azul)..
Nota Fiscal Produto
0..* 0..* Envolve a Venda deEnvolve a Venda de�� 1..*1..*
Número
Data
CódBarras
Nome
Item
NumItens
PreçoUnitário
11
1..*1..* 0..*0..*
11
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
45
Estabelecimento de RelacionamentosEstabelecimento de Relacionamentos
ResumoResumo
•• Quando o relacionamento for Quando o relacionamento for UnárioUnário
–– Adicionamos um Adicionamos um atributoatributo cujo tipo será cujo tipo será ponteiro ponteiro 
para um objeto da classe <...>para um objeto da classe <...>
–– Adicionamos um Adicionamos um métodométodo set<...>set<...>
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
–– Adicionamos um Adicionamos um métodométodo set<...>set<...>
•• Quando o relacionamento for Quando o relacionamento for NN--árioário
–– Adicionamos um Adicionamos um atributoatributo cujo tipo será cujo tipo será ponteiro ponteiro 
para um objeto de coleçãopara um objeto de coleção
–– Adicionamos os Adicionamos os métodosmétodos addadd<...> <...> ee remove<...>remove<...>
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
Estabelecimento de RelacionamentosEstabelecimento de Relacionamentos
ResumoResumo
Estrutura do Método Estrutura do Método set____________set____________
publicpublic voidvoid setset[ATRIBUTO][ATRIBUTO](([CLASS[CLASSE_APONTADA]E_APONTADA] objClasseobjClasse) {) {
// Se // Se [ATRIBUTO][ATRIBUTO] aponta para o mesmo objeto apontado por aponta para o mesmo objeto apontado por objClasseobjClasse
// não há necessidade de atualização// não há necessidade de atualização
ifif((thisthis..[ATRIBUTO][ATRIBUTO] == == objClasseobjClasse))
returnreturn;;
// Se o parâmetro é // Se o parâmetro é nullnull, isto indica que os vínculos devem ser removidos, isto indica que os vínculos devem ser removidos
ifif((objClasseobjClasse == == nullnull)) {{
[CLASS[CLASSE_APONTADA] E_APONTADA] antigo = antigo = thisthis..[ATRIBUTO][ATRIBUTO];;
// Apago a referência antiga// Apago a referência antiga
thisthis..[ATRIBUTO][ATRIBUTO] = = nullnull;;
46
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- - // Solicito ao objeto antigo que deixe de referenciar o // Solicito ao objeto antigo que deixe de referenciar o thisthis..
antigo.antigo.removeremove[CLASSE][CLASSE]((thisthis); ); OUOU antigo.setantigo.set[CLASSE][CLASSE]((nullnull););}}
elseelse {{
// Se o // Se o thisthis jjá á apontavaapontava parapara um um objetoobjeto de de [CLASS[CLASSE_APONTADA]E_APONTADA], , 
// vamos fazer a remoção do vínculo antigo // vamos fazer a remoção do vínculo antigo 
ifif((thisthis..[ATRIBUTO][ATRIBUTO] != != nullnull))
thisthis..[ATRIBUTO][ATRIBUTO]..removeremove[CLASSE][CLASSE]((thisthis); ); OUOU
thisthis..[ATRIBUTO][ATRIBUTO].set.set[CLASSE][CLASSE]((nullnull););
// Estabeleço a referência// Estabeleço a referência
thisthis..[ATRIBUTO][ATRIBUTO] = = objClasseobjClasse;;
// solicito ao // solicito ao objClasseobjClasse para referenciar o para referenciar o thisthis..
objClasseobjClasse..addadd[CLASSE][CLASSE]((thisthis); ); OUOU objClasseobjClasse.set.set[CLASSE][CLASSE]((thisthis););
}}
}}
1
7
/
0
8
/
2
0
1
3
1
7
/
0
8
/
2
0
1
3
Estabelecimento de RelacionamentosEstabelecimento de Relacionamentos
ResumoResumo
TOTO
publicpublic voidvoid addadd[CLASS[CLASSE_APONTADA]E_APONTADA](([CLASS[CLASSE_APONTADA]E_APONTADA] novo)novo)
{{
// Se a referência já está presente na lista de // Se a referência já está presente na lista de [CLASS[CLASSE_APONTADA]E_APONTADA]
// não há necessidade de atualização// não há necessidade de atualização
ifif((thisthis.lista.lista[CLASS[CLASSE_APONTADA]E_APONTADA]s.s.containscontains(novo))(novo))
returnreturn;;
// Adicionando a referência na lista// Adicionando a referência na lista[CLASS[CLASSE_APONTADA]E_APONTADA]ss
thisthis.lista.lista[CLASS[CLASSE_APONTADA]E_APONTADA]s.s.addadd(novo);(novo);
// Solicito a adição da referência no sentido inverso// Solicito a adição da referência no sentido inverso
novo.novo.setset[CLASSE][CLASSE]((thisthis); ); OUOU novo.novo.addadd[CLASSE][CLASSE]((thisthis););
47
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
C
o
l
e
ç
õ
e
s
 
e
 
V
i
s
i
b
i
l
i
d
a
d
e
 
 
- -
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
A
l
e
s
s
a
n
d
r
o
 
 
C
e
r
q
u
e
i
r
a
 
 
- -
novo.novo.setset[CLASSE][CLASSE]((thisthis); ); OUOU novo.novo.addadd[CLASSE][CLASSE]((thisthis););
}}
publicpublic voidvoid removeremove[CLASS[CLASSE_APONTADA]E_APONTADA](([CLASS[CLASSE_APONTADA]E_APONTADA] antigo)antigo)
{{
// Se a referência antiga já não está presente na lista // Se a referência antiga já não está presente na lista 
// não há necessidade de atualização// não há necessidade de atualização
ifif( ( !! thisthis.lista.lista[CLASS[CLASSE_APONTADA]E_APONTADA]s.s.containscontains(antigo))(antigo))
returnreturn;;
// Removendo a // Removendo a refer~enciarefer~encia antigaantiga
thisthis.lista.lista[CLASS[CLASSE_APONTADA]E_APONTADA]s.s.removeremove(antigo);(antigo);
// Solicito a remoção da referência no sentido inverso// Solicito a remoção da referência no sentido inverso
antigo.antigo.setset[CLASSE][CLASSE]((nullnull); ); OUOU antigo.removeantigo.remove[CLASSE][CLASSE]((thisthis); ); 
}}

Continue navegando