Está en la página 1de 18

Centro Universitrio de Joo Pessoa Unip Cincia da Computao

Colees e Mapas (Parte 1)


Metodologia e Linguagem de Programao III
Andr Figueiredo andre.unipe@gmail.com

Roteiro

Sobrepondo o mtodo equals() O que so colees Vetores Classe Arrays Ordenao com Comparable Ordenao com Comparator Outras funes de Arrays

Sobrepondo o mtodo equals

H vrios mtodos em Object que devem ser sobrepostos pelas subclasses


A subclasse que voc est estendendo talvez j tenha sobreposto esses mtodos mas, alguns deles, talvez precisem ser redefinidos para que sua classe possa ser usada de forma correta

Mtodos que devem ser sobrepostos boolean equals(Object o): Defina o critrio de
igualdade para seu objeto int hashCode(): Para que seu objeto possa ser localizado em Hashtables String toString(): Sobreponha com informaes especficas do seu objeto Object clone(): se voc desejar permitir cpias do seu objeto

Sobrepondo o mtodo equals()

A verso original de equals() s verifica se duas referncias so iguais, ou seja, se ambas referenciam o mesmo objeto Sobrepondo equals() possvel comparar objetos a partir de atributos em comum Exemplo

O que so colees

So estruturas de dados comuns


Vetores (listas) Conjuntos Pilhas rvores binrias Tabelas de hash etc.

Oferecem formas diferentes de colecionar dados com base em fatores como


Eficincia no acesso ou na busca ou na insero Forma de organizao dos dados Forma de acesso, busca, insero

Java Collections API

Oferece uma biblioteca de classes e interfaces (no pacote java.util) que


Implementa as principais estruturas de dados de forma reutilizvel (usando apenas duas interfaces comuns) Oferece implementaes de cursor para iterao (Iterator pattern) para extrair dados de qualquer estrutura usando uma nica interface Oferece implementaes de mtodos estticos utilitrios para manipulao de colees e vetores

Tipos de Colees em Java

Vetores
Mecanismo nativo para colecionar valores primitivos e referncias para objetos Podem conter objetos (referncias) tipos primitivos Forma mais eficiente de manipular colees

Colees
No suporta primitivos (somente se forem empacotados dentro de objetos) Classes e interfaces do pacote java.util Interfaces Collection, List, Set e Map e implementaes Iterator, classes utilitrias e colees legadas

Vetores de Objetos

F orma mais eficiente de manter referncias Caractersticas


Tamanho fixo. preciso criar um novo vetor e copiar o contedo do antigo para o novo. Vetores no podem ser redimensionados depois de criados. Quantidade mxima de elementos obtida atravs da propriedade length (comprimento do vetor) Verificados em tempo de execuo. Tentativa de acessar ndice inexistente provoca, na execuo, um erro do tipo ArrayIndexOutOfBoundsException Tipo definido. Pode-se restringir o tipo dos elementos que podem ser armazenados

Vetores so objetos
Quando um vetor criado no heap, ele possui "mtodos" e campos de dados como qualquer outro objeto Diferentes formas de inicializar um vetor

Como retornar vetores

Como qualquer vetor (mesmo de primitivos) objeto, s possvel manipul-lo via referncias
Atribuir um vetor a uma varivel copia a referncia do vetor varivel
int[] vet = intArray; // se intArray for int[]

Retornar um vetor atravs de um mtodo retorna a referncia para o vetor


int[] aposta = sena.getDezenas();

Classe Arrays

Classe utilitria com diversos mtodos estticos para manipulao de vetores M todos suportam vetores de quaisquer tipos P rincipais mtodos (sobrecarregados para vrios tipos)
void Arrays.sort(vetor) Usa Quicksort para primitivos Usa Mergesort para objetos (classe do objeto deve implementar a interface Comparable) boolean Arrays.equals(vetor1, vetor2) int Arrays.binarySearch(vetor, chave) void Arrays.fill(vetor, valor)

Ordenao

Para ordenar objetos preciso compar-los. Como estabelecer os critrios de comparao?


equals() apenas informa se um objeto igual a outro, mas no informa se " maior" ou "menor"

Soluo: interface java.lang.Comparable


Mtodo a implementar: public int compareTo(Object obj);

Para implementar, retorne


Um inteiro menor que zero se objeto atual for "menor que o recebido como parmetro Um inteiro maior que zero se objeto atual for "maior" que o recebido como parmetro Zero se objetos forem iguais

Exemplo java.lang.Comparable

Como usar

Comparator

Comparable exige que a classe do objeto a ser comparado implemente uma interface E se uma classe inacessvel no a implementa? O que fazer se voc no tem acesso para modificar ou estender a classe? Soluo: interface utilitria java.util.Comparator Crie uma classe utilitria que implemente Comparator e passe-a como segundo argumento de Arrays.sort(). Mtodo a implementar:
public int compare(Object o1, Object o2);

Exemplo java.util.Comparator

Como usar

No confunda Comparator com Comparable

Ao projetar classes novas, considere sempre implementar java.lang.Comparable


Objetos podero ser ordenados mais facilmente Critrio de ordenao faz parte do objeto compareTo() compara objeto atual com um outro

java.util.Comparator no faz parte do objeto comparado


Implementao de Comparator uma classe utilitria Use quando objetos no forem Comparable ou quando no quiser usar critrio de ordenao original do objeto compare() compara dois objetos recebidos

Outras funes teis de Arrays

boolean equals(vetor1, vetor2)


Retorna true apenas se vetores tiverem o mesmo contedo(mesmas referncias) na mesma ordem S vale para comparar vetores do mesmo tipo primitivo ou vetores de objetos

void fill(vetor, valor)


Preenche o vetor (ou parte do vetor) com o valor passado como argumento (tipo deve ser compatvel)

int binarySearch(vetor, valor)


Retorna inteiro com posio do valor no vetor ou valor negativo com a posio onde deveria estar No funciona se o vetor no estiver ordenado Se houver valores duplicados no garante qual ir ser localizado

Colees e Mapas Parte 1

Dvidas???