• Nenhum resultado encontrado

if992-03-Colecoes-genericas

N/A
N/A
Protected

Academic year: 2021

Share "if992-03-Colecoes-genericas"

Copied!
39
0
0

Texto

(1)

Coleções  genéricas  

Sistemas  de  Informação  

Prof.  Vinicius  Cardoso  Garcia  

vcg@cin.ufpe.br  

(2)

Licença  do  Material  

Este  Trabalho  foi  licenciado  com  uma  Licença  

CreaFve  Commons  -­‐  Atribuição-­‐NãoComercial-­‐

ComparFlhaIgual  3.0  Não  Adaptada

.  

 

Mais  informações  visite  

(3)

LogísFca  

•  Apresentação do professor

•  Material

•  Dúvidas? Interrompam a vontade...

•  Celulares silenciosos

(4)

ObjeFvos  

• 

O  que  são  coleções  

• 

Manipulação  de  coleções  

• 

Coleções  polimórficas  

• 

Iteradores  

• 

Tabelas  hash  para  manipular  objetos  

(5)

Introdução  

• 

Uma  coleção  é  uma  

estrutura  de  dados  

—  na  

realidade,  um  

objeto  

—  que  pode  armazenar  

referências

 

a  outros  objetos.  

– 

Interfaces  e  métodos  para  manipular  essas  

estruturas  de  dados    

• 

Normalmente,  as  coleções  contêm  referências  

(6)
(7)

Classes  empacotadoras  de  Fpo  para  

Fpos  primiFvos  

• 

Cada  >po  primi>vo  tem  uma  classe  empacotadora  de  

>po  correspondente  (no  pacote  java.lang).    

– 

Boolean,  Byte,  Character,  Double,  Float,  Integer,  Long  e  

Short.    

• 

Cada  classe  empacotadora  de  >po  permite  

manipular

 

valores  de  >po  primi>vo  como  objetos.    

• 

As  coleções  

não  podem

 manipular  variáveis  de  >pos  

primi>vos.    

• 

Elas  podem  manipular  

objetos  das  classes  

(8)

Classes  empacotadoras  de  Fpo  para  

Fpos  primiFvos  

• 

Cada  uma  das  classes  empacotadoras  de  >pos  

numéricos  —  Byte,  Short,  Integer,  Long,  Float  

e  Double  —  estendem  a  classe  Number.    

• 

As  classes  empacotadoras  de  >pos  são  

classes  

final

,  portanto,  você  

não  pode  estendê-­‐las

.    

• 

Os  >pos  primi>vos  

não  têm  métodos

,  então,  

os  métodos  relacionados  a  um  >po  primi>vo  

estão  

localizados  na  classe  empacotadora  

de  

(9)

Autoboxing  e  auto-­‐unboxing  

• 

Uma  

conversão  boxing  

converte  um  valor  de  um  

>po  primi>vo  em  um  objeto  da  classe  empacotadora  

de  >po  correspondente.    

• 

Uma  conversão  

unboxing  

converte  um  objeto  de  

uma  classe  empacotadora  de  >po  em  um  valor  do  

>po  primi>vo  correspondente.    

• 

Essas  conversões  podem  ser  realizadas  

automa>camente  (chamam-­‐se  

autoboxing

 e  

auto-­‐

(10)

Autoboxing  e  auto-­‐unboxing  

// cria integerArray

Integer[] integerArray = new Integer[ 5 ]; // atribui Integer 10 a integerArray[ 0 ] integerArray[ 0 ] = 10;

// obtém o valor int de Integer

int value = integerArray[ 0 ]; // cria integerArray

Integer[] integerArray = new Integer[ 5 ]; // atribui Integer 10 a integerArray[ 0 ] integerArray[ 0 ] = new Integer(10); // obtém o valor int de Integer

(11)

Interface  CollecFon  e  classe  

CollecFons  

•  A  interface  CollecFon  é  a  interface-­‐raiz  a  par>r  da  qual  as   interfaces  Set,  Queue  e  List  são  derivadas.    

–  A  interface  Set  define  uma  coleção  que  não  contém  duplicatas.     –  A  interface  Queue  define  uma  coleção  que  representa  uma  fila  de  

espera.    

–  A  interface  CollecFon  contém  operações  de  volume  para  adicionar,   limpar  e  comparar  objetos  de  uma  coleção.    

–  Uma  CollecFon  também  pode  ser  conver>da  em  um  array.    

•  A  interface  Collec>on  fornece  um  método  que  retorna  um  objeto  

Iterator,  que  permite  a  um  programa  percorrer  a  coleção  e  

remover  elementos  da  coleção  durante  a  iteração.    

•  A  classe  Collec>on  fornece  os  métodos  staFc  que  pesquisam,  

(12)

Listas  

• 

Uma  

List  

(às  vezes,  chamada  sequência)  é  uma  

CollecFon  

que  pode  conter  

elementos  duplicados

.    

–  Os  índices  de  List  são  baseados  em  zero.  

• 

Além  dos  métodos  herdados  de  Collec>on,  List  fornece  

métodos  para  manipular  

elementos  via  seus  índices,  

manipular  um  intervalo  especificado  de  elementos,  

procurar  elementos  

e  

obter  um  ListIterator  para  acessar  

os  elementos

.  

• 

A  interface  List  é  implementada  por  várias  classes,  

incluindo  

ArrayList,  LinkedList  e  Vector

.    

• 

O  autoboxing  ocorre  quando  você  adiciona  valores  de  >po  

primi>vo  a  objetos  dessas  classes,  pois  eles  armazenam  

apenas  referências  a  objetos.    

(13)

Listas  

•  As  classes  ArrayList  e  Vector  são  implementações  de  arrays  

redimensionáveis  de  List.    

•  Inserir  um  elemento  entre  elementos  existentes  de  um  ArrayList  ou   Vector  é  uma  operação  ineficiente.    

•  Uma  LinkedList  permite  inserção  (ou  remoção)  eficiente  de   elementos  no  meio  de  uma  coleção.    

•  A  principal  diferença  entre  ArrayList  e  Vector  é  que  Vectors  são   sincronizados  por  padrão,  enquanto  ArrayLists  não  o  são.    

•  As  coleções  não  sincronizadas  fornecem  melhor  desempenho  que   as  sincronizadas.    

•  Por  essa  razão,  ArrayList  é,  em  geral,  preferida  a  Vector  em   programas  que  não  compar>lham  uma  coleção  entre  threads.    

(14)

 ArrayList  e  Iterator  

•  O  método  List  add  adiciona  um  item  ao  final  de  uma  lista.     •  O  método  List  size  retorna  o  número  de  elementos.    

•  O  método  List  get  recupera  o  valor  de  um  elemento  individual  de   um  índice  especificado.    

•  O  método  CollecFon  iterator  obtém  um  Iterator  de  uma  Collec>on.     •  O  método  Iterator  hasNext  determina  se  uma  Collec>on  contém  

mais  elementos.  Retorna  true  se  houver  outro  elemento  e,  false,   caso  contrário.    

•  O  método  Iterator  next  retorna  uma  referência  para  o  próximo   elemento.  

•  O  método  CollecFon  contains  determina  se  uma  Collec>on  contém   um  elemento  especificado.  

(15)
(16)
(17)
(18)

LinkedList    

• 

O  método  

List  addAll  

acrescenta  todos  os  elementos  de  

uma  coleção  ao  final  de  uma  List.    

• 

O  método  

List  listIterator  

obtém  o  iterador  bidirecional  de  

uma  List.    

• 

O  método  

String  toUpperCase  

obtém  uma  versão  em  letras  

maiúsculas  de  uma  String.    

• 

O  método  

ListIterator  set  

subs>tui  o  elemento  atual  ao  

qual  o  iterador  referencia  por  um  objeto  especificado.    

• 

O  método  

String  toLowerCase  

retorna  uma  versão  em  

letras  minúsculas  de  uma  String.    

• 

O  método  

List  subList  

obtém  uma  parte  de  uma  List.    

–  Isso  é  o  que  chamamos  de  método  de  visualização  de  intervalo,   que  permite  ao  programa  visualizar  uma  parte  da  lista.    

(19)

LinkedList    

• 

O  método  

List  clear  

remove  os  elementos  de  

uma  List.    

• 

O  método  

List  size  

retorna  o  número  de  itens  

na  List.    

• 

O  método  

ListIterator  hasPrevious  

determina  

se  há  mais  elementos  ao  percorrer  a  lista  de  

trás  para  frente.    

(20)

Arrays  

•  A  classe  Arrays  fornece  o  método  staFc  asList  para  visualizar  um   array  como  uma  coleção  List.    

–  Uma  visualização  List  permite  manipular  o  array  como  se  ele  fosse   uma  lista.    

•  Isso  é  ú>l  para  adicionar  os  elementos  de  um  array  a  uma  coleção  e   para  classificar  os  elementos  do  array.    

•  Qualquer  modificação  feita  por  meio  da  visualização  List  altera  o   array,  e  qualquer  modificação  feita  no  array  altera  a  visualização   List.    

•  A  única  operação  permi>da  na  visualização  retornada  por  asList  é  

set,  que  altera  o  valor  da  visualização  e  o  array  de  apoio.    

•  Quaisquer  outras  tenta>vas  de  alterar  a  visualização  resultam  em   uma  UnsupportedOperaFonExcepFon.  

(21)

LinkedList    

• 

O  método  

LinkedList  addLast  

adiciona  um  

elemento  ao  final  de  uma  List.    

• 

O  método  

LinkedList  add  

também  adiciona  

um  elemento  ao  final  de  uma  List.    

• 

O  método  

LinkedList  addFirst  

adiciona  um  

(22)
(23)

Classe  Stack  do  pacote  java.uFl    

• 

A  classe  Stack  do  pacote  de  u>litários  Java  

(java.u>l)  estende  a  classe  Vector  para  

implementar  uma  estrutura  de  dados  de  pilha.    

• 

Métodos  push  e  pop  

• 

Se  não  houver  nenhum  elemento  na  Stack,  o  

método  pop  lança  uma  

EmptyStackExcepFon

,  

que  termina  o  loop.    

• 

O  método  

peek  

retorna  o  elemento  no  topo  da  

pilha  sem  remover  o  elemento  da  pilha.  

(24)

Classe  PriorityQueue  e  interface  

Queue    

• 

A  interface  

Queue  

estende  a  interface  CollecFon  

e  fornece  operações  adicionais  para  

inserir

,  

remover  

e  

inspecionar  

elementos  em  uma  

fila

.    

PriorityQueue  

ordena  

os  elementos  de  acordo  

com  seu  ordenamento  natural.    

• 

Os  elementos  são  inseridos  na  ordem  de  

prioridade  de  tal  modo  que  o  elemento  de  

maior  

prioridade

 (isto  é,  o  maior  valor)  será  o  

primeiro  

(25)

Classe  PriorityQueue  e  interface  

Queue    

• 

As  operações  

PriorityQueue  

comuns  são:  

offer  

para  inserir  um  elemento  na  localização  

adequada  com  base  na  ordem  de  prioridade.  

poll  

para  remover  o  elemento  de  mais  alta  

prioridade  da  fila  de  prioridade.  

peek  

para  obter  uma  referência  ao  elemento  de  

prioridade  mais  alta  da  fila  de  prioridades.  

clear  

para  remover  todos  os  elementos  da  fila  de  

(26)

Conjuntos  

• 

Um  

Set

 

é  uma  

CollecFon  

não  ordenada  

de  

elementos  

únicos

 

(isto  é,  sem  elementos  

duplicados).    

• 

A  estrutura  de  coleções  contém  diversas  

implementações  de  

Set

,  incluindo  

HashSet  

e  

TreeSet

.    

• 

HashSet  

armazena  seus  elementos  em  uma  

tabela  de  hash  

e  

TreeSet  

armazena  seus  

(27)

Conjuntos  

• 

A  estrutura  de  coleções  também  inclui  a  interface  

SortedSet  

(que  estende  Set)  para  conjuntos  que  

mantêm  seus  elementos  em  

ordem  de  classificação

.    

• 

A  classe  

TreeSet  

implementa  

SortedSet

.      

• 

O  método  

TreeSet  headSet  

obtém  um  subconjunto  de  

TreeSet  em  que  

todo  elemento  é  menor  do  que  o  

valor  especificado

.    

• 

O  método  

TreeSet  tailSet  

obtém  um  subconjunto  em  

que  

cada  elemento  é  maior  ou  igual  a  um  elemento  

especificado

.  

(28)

Mapas  

Maps  

associam  

chaves  

a  

valores

.    

– 

As  chaves  de  um  Map  devem  ser  

únicas

,  mas  os  valores  

associados,  não.    

• 

Se  um  Map  con>ver  tanto  chaves  como  valores  únicos,  

dizemos  que  ele  implementa  um  mapeamento  

um  

para  um

.    

• 

Se  apenas  as  chaves  forem  únicas,  dizemos  que  o  Map  

implementa  um  mapeamento  de  

muitos  para  muitos  

—  muitas  chaves  podem  mapear  para  um  valor.    

• 

Três  das  várias  classes  que  implementam  a  interface  

Map  são  

Hashtable,  HashMap  e  TreeMap

.    

(29)

Mapas  

•  A  interface  SortedMap  estende  Map  e  mantém  suas  chaves  em  ordem  de   classificação  —  na  ordem  natural  dos  elementos  ou  em  uma  ordem  

especificada  por  um  Comparator.    

•  A  classe  TreeMap  implementa  SortedMap.    

•  Hashing  é  um  esquema  de  alta  velocidade  para  converter  chaves  em   índices  de  arrays  únicos.    

–  O  fator  de  carga  de  uma  tabela  de  hash  afeta  o  desempenho  de  esquemas  de   hashing.    

•  O  fator  de  carga  é  a  relação  do  número  de  células  ocupadas  na  tabela  de   hash  com  o  número  total  de  células  na  tabela  de  hash.    

(30)

Mapas  

•  O  método  Map  containsKey  determina  se  a  chave  está  em  um   mapa.  

•  O  método  Map  put  cria  uma  nova  entrada  no  mapa  ou  subs>tui  um   valor  de  entrada  existente.    

–  O  método  put  retorna  o  valor  anterior  associado  com  a  chave,  ou  null   se  a  chave  não  es>ver  no  mapa.  

•  O  método  get  obtém  o  valor  associado  com  a  chave  especificada  no   mapa.    

•  O  método  HashMap  keySet  retorna  um  conjunto  de  chaves.     •  O  método  size  retorna  o  número  dos  pares  de  chaves/valor  no  

Map.    

•  O  método  isEmpty  retorna  um  boolean  que  indica  se  o  Map  está   vazio.  

(31)

Classe  ProperFes  

• 

Um  

objeto  ProperFes  

é  um  

Hashtable  

persistente  que  

normalmente  armazena  os  pares  de  

chave/valor  

de  strings  

–  supondo  que  você  u>liza  métodos  setProperty  e  getProperty   para  manipular  a  tabela  em  vez  dos  métodos  Hashtable  put  e   get  herdados.    

• 

O  conteúdo  do  objeto  

ProperFes  

pode  ser  

gravado  em  um  

fluxo  de  saída

 (possivelmente  um  arquivo)  e  

lido  de  volta  

por  um  fluxo  de  entrada

.    

• 

Um  uso  comum  de  objetos  Proper>es  em  versões  

anteriores  do  Java  era  manter  os  

dados  de  configuração  de  

aplicaFvo  ou  preferências  de  usuário  de  aplicaFvos

.    

(32)

Classe  ProperFes  

• 

O  método  ProperFes  store  salva  o  conteúdo  do  

objeto  no  

OutputStream  

especificado  como  o  

primeiro  argumento.  O  segundo  argumento,  uma  

String,  é  uma  descrição  gravada  no  arquivo.    

• 

O  método  ProperFes    list,  que  aceita  um  

argumento  

PrintStream

,  é  ú>l  para  exibir  a  lista  

de  propriedades.  

• 

O  método  ProperFes  load  restaura  o  conteúdo  

de  um  objeto  

ProperFes  

a  par>r  do  

InputStream  

especificado  como  o  primeiro  argumento  (nesse  

(33)

Coleções  sincronizadas  

• 

Os  

empacotadores  de  sincronização  

são  

u>lizados  para  coleções  que  podem  ser  

acessadas  por  

múlFplas  threads

.    

• 

Um  objeto  empacotador  (

wrapper

)  recebe  

chamadas  de  método,  adiciona  sincronização  de  

thread  e  delega  as  chamadas  para  o  objeto  de  

coleção  empacotado.    

• 

A  

API  CollecFons  

fornece  um  conjunto  de  

(34)

Métodos  empacotadores  de  

sincronização    

(35)

Coleções  não  modificáveis  

• 

A  classe  

CollecFons  

fornece  um  conjunto  de  

métodos  

staFc  

que  criam  empacotadores  não  

modificáveis  para  coleções.    

• 

Empacotadores  não  modificáveis  

lançam  

UnsupportedOperaFonExcepFons  

se  forem  

feitas  tenta>vas  de  modificar  a  coleção.  

(36)

Métodos  empacotadores  não  

modificáveis  

(37)

Implementações  abstratas  

• 

A  estrutura  de  coleções  fornece  

várias  

implementações  abstratas  

de  interfaces  

Collec>on  a  par>r  das  quais  você  pode  

implementar  rapidamente  

aplicaFvos  

personalizados  completos

.    

• 

Elas  incluem:  

– 

uma  implementação  simples  de  Collec>on  chamada  

AbstractCollecFon  

– 

uma  implementação  de  List  que  permite  acesso  

(38)

Implementações  abstratas  

• 

...  

– 

uma  implementação  de  List  que  permite  acesso  

sequencial  

a  seus  elementos  chamada  

AbstractSequenFalList

.  

– 

uma  implementação  de  

Set  

chamada  

AbstractSet

.    

– 

uma  implementação  de  

Queue  

chamada  

(39)

AFvidades  

1.  Alterar  o  sistema  de  ATM  para  o  uso  de  

coleções  

2.  Não  esqueça  de  manter/atualizar  o  

tratamento  de  exceções!  

3.  Nem  tampouco  de  manter  a  persistência  em  

arquivos!  

Referências

Documentos relacionados

Nesta situação o cliente era reencaminhado para o nosso gerente, perito no assunto, que posteriormente fazia uma visita ao local onde iria ser feito o trabalho

Recebe encaminhamentos de casos de uso e abuso de álcool e outras drogas através do CRAS, CREAS, Conselho Tutelar, Plantão Social da PMOB, Fórum da Comarca de

Este trabalho, portanto, tem como objetivo relatar a ocorrência e descrever os achados epidemiológicos, clínicos, laboratoriais e anatomopatológicos de um surto da intoxicação

“À margem das divergências de interpretação sobre cada um dos preceitos legais ou sobre as implicações políticas da reforma trabalhista, que já foram objeto de

Os (as) demais professores (as) apesar de não apresentar uma abordagem específica como ocorre na resposta do (da) professor (a) A, mostraram-se comprometidos com a aprendizagem de

Semelhanças entre a sequência narrativa dos textos (expostas aqui muito brevemente, e em caráter exemplar), bem como constantes referências à obra ovidiana (à

Porém, o principal foco desta pesquisa é investigar como Lacan articulou essa questão nos primeiros anos de seu ensino, e, para tanto, será necessário

P ercebendo que Cururu Chin estava imóvel e hipnotizado ouvindo suas histórias, Rhina empolgou-se e continuou com ar de mistério: – Existem rãs e sapos que podem fazer uma coisa