coleções - universidade federal do maranhãogeraldo/poo/6.1colecoesavancadas.pdf ·...

Post on 13-Aug-2020

5 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Coleções Avançadas

Programação Orientada a Objetos Java

Prof. Anselmo Cardoso Paiva

Prof. Geraldo Braz Junior

Objetivos Aprender como o conceito de coleção

pode ser expresso de forma genérica

Examinar a interface de três tipos diferentes de coleções:◦ Listas◦ Conjuntos◦ Mapas

Apresentar a finalidade de cada uma das interfaces chave e saber que coleção selecionar com base em um determinado requisito

2

Motivação Saber trabalhar bem com coleções é um

requisito fundamental para qualquer programador, pois objetos possuem relacionamentos entre si

As coleções apresentam uma excelente implementação dos conceitos de orientação a objetos o que permitem que elas seja altamente reutilizáveis e fáceis de usar

3

O que são coleções? São estruturas de dados que fornecem um

conjunto bem definido de classes e interfaces do pacote java.util que agregam grupos de objetos como unidade simples (listas, conjuntos e mapas)

A coleção é, em si, um objeto também

4

O que são coleções? São estruturas de dados comuns:

Vetores, Listas, Conjuntos, Pilhas, Árvores binárias, Tabelas Hash

As coleções não armazenam tipos primitivos. Para manipulá-los é necessário envolvê-los nas classes empacotadoras (wrappers – Integer, Double, ...)

5

Coleções As Coleções são compostas de três partes:

Interfaces: Possibilitam manipular as coleções independentes de sua implementação fornecendo uma interface uniforme

Implementações: São classes concretas que implementam as interfaces. No geral, são estruturas de dados reutilizáveis

Algoritmos: métodos reutilizáveis para buscar, classificar e remover objetos em uma coleção

6

Tipos de Coleções Dependendo da forma de fazer as 4 quatro

operações básicas (adição, remoção, acesso e pesquisa), temos vários tipos de coleções, onde:

Certas operações poderão ter um desempenho melhor ou pior

Certas operações poderão ter restrições ou funcionalidade especial

7

Tipos de Coleções Existem dois tipos de coleções em Java: as

que implementam a Interface Collection e os mapas, que implementam Map

A interface Collection possui duas subinterfaces:◦ List – representa uma lista de itens◦ Set – representa um conjunto (os itens não

podem se repetir)

A interface Map implementa uma tabela Hash - compostos de chaves + valor◦ SortMap - mapa ordenado

8

Tipos de Coleções

9

Interface Collection Fornece dois métodos fundamentais

boolean add(Object obj) retorna true se a inclusão alterou a coleção

Exemplo: ao tentar incluir um objeto em um conjunto (Set) , se o objeto já existir será retornado false, pois conjuntos não aceitam valores duplicados

Iterator iterator() retorna um objeto que implementa a interface

Iterator que pode ser utilizado para percorrer os objetos na coleção

10

Interface Iterator Encapsula a navegação dos elementos de

uma coleção. Suporta acesso unidirecional e a remoção do objeto corrente

Esta interface fornece três métodos fundamentais Object next()

boolean hasNext()

void remove()

11

Interface Iterator Com o método next() é possível examinar

os elementos da coleção. Entretanto se for atingido o fim da coleção, será lançado uma exceção “não verificada” NoSuchElementException

Deve-se chamar o método hasNext() para resolver este problema

Por que o método remove() faz parte da interface Iterator ?

Por motivo de eficiência, pois permite eliminar um objeto – recuperado através do método next() – ao examiná-lo

12

Interface Iterator É inválido chamar remove() se ele não for

precedido de uma chamada a next(). Caso tente fazer isto será lançado um IllegalStateException

Exemplo: eliminando o primeiro elemento

Iterator it = c.iterator();

it.next(); //recupera o primeiro elemento

it.remove(); //agora, remove-o

13

Outros métodos de Collection int size()

retorna o tamanho da coleção

boolean isEmpty()

indica se a coleção está vazia ou não

boolean remove(Object obj)

retorna true se o objeto passado como parâmetro foi removido, false caso contrário

14

Outros métodos de Collection boolean addAll(Collection outro)

faz a união de duas coleções

15

Outros métodos de Collection boolean removeAll(Collection outra)

remove todos os elementos dessa coleção que são iguais aos elementos da outra coleção Parâmetro: outra – indica os elementos a serem removidos

Só retorna falso se não for removido nenhum elemento

16

Outros métodos de Collection

17

Outros métodos de Collection boolean retainAll(Collection outra)

remove todos os elementos dessa coleção que não são iguais a um dos elementos da outra coleção

Parâmetro: outra – indica os elementos a serem mantidos

18

Outros métodos de Collection void clear()

Apaga todo o conteúdo da coleção

Object [] toArray()

retorna um array dos objetos da coleção

19

Características das Coleções Pode ser armazenado qualquer objeto na

coleção

Não aceitam tipos primitivos (mas podem ser empacotados utilizando uma classe wrapper)

20

Características das Coleções

21

Solução para o problema anterior

Utilizar o padrão de projeto “Delegação”

22

Collections utilizando Generics (Java 5)

Collection<E>

O parâmetro E parametriza o tipo de elemento armazenado na coleção

23

A Hierarquia de classes para coleções

24

A Hierarquia de classes para Mapas

Mapa é um tipo especial de coleção que armazena pares de objetos (chave + valor)

25

Classes que implementam ListArrayList, LinkedList, Vector

List Uma lista é uma coleção de elementos

dispostos numa ordem linear, onde cada elemento tem um antecessor (exceto o primeiro) e um sucessor (exceto o último)

Normalmente implementada como "Array" (Vector, ArrayList) ou "Lista Encadeada" (LinkList)

Todas as três implementações são ordenadas (pode-se visitar todos os elementos em uma ordem não aleatória)

Uma Lista pode ser mantida classificada ou não

27

Listas Operações mais importantes de uma

coleção do tipo Lista:

Adicionar um elemento em qualquer lugar da lista, fornecendo o índice desejado add(int indice, Object obj)

28

Listas Remover um elemento presente em

qualquer lugar da lista, fornecendo o índice desejado

Object remove(int indice)

Caso o índice seja inválido será lançada uma exceção do tipo IndexOutOfBoundsException

29

Listas Acesso aos elementos

Obter o elemento de qualquer posição da lista, fornecendo o índice desejado Object get(int indice)

Iterar sobre os elementos Iterator iterator()

Pesquisa de elementos

Descobrir o índice de um elemento na lista int indexOf(Object o)

Obter o número de elementos da coleção int size()

30

A classe ArrayList Escolha natural quando for necessário usar

um vetor redimensionável

Implementado internamente com vetores

Dar suporte a acesso aleatório rápido

Esta lista é ideal quando precisar de interações rápida e não pretender executar muitas inserções e remoções

31

ArrayList - Exemplo

32

LinkedList Implementa uma lista duplamente

encadeada

Fornece novos métodos (além dos obtidos na interface List) para implementar pilhas ou filas

void addFirst(Object o)

void addLast(Object o)

Object getFirst( )

Object getLast( )

33

LinkedList Muito mais eficiente que ArrayList para

remoção einserção no meio da lista, onde apenas o encadeamento em torno do elemento precisa ser atualizado

Também é ideal para acesso seqüencial

34

LinkedList

35

LinkedList Quando se deseja inserir em uma posição

especifica da lista precisamos de um iterador. O problema é que a interface Iterador não fornece um método add()

Solução: É fornecida na sub interface ListIterator que contém o método add()

Ao contrario de add em Collection esse método não retorna um valor boolean, pressupõem que a operação sempre tem sucesso

36

LinkedList

37

Classes que implementam Conjunto HashSet, LinkedSet e TreeSet

Conjuntos Dá importância a exclusividade

Um conjunto é uma coleção que não possui elementos duplicados

O método equals() determina se dois objetos são iguais

Não há noção de "ordem dos elementos"

O Conjunto pode ser mantido ordenado ou não

Normalmente implementada como "Tabela Hash” (HashSet, LinkedHashSet, TreeSet)

39

Conjuntos Operações mais importantes de uma

coleção do tipo Conjunto:

Adição de elementos (descartando duplicações) boolean add(Object): só adiciona o elemento se

ele já não estiver presente (usa equals() para saber se o objeto é o mesmo)

Remoção de elementos Remover um objeto presente no conjunto

Acesso aos elementos Iterar sobre os elementos

Pesquisa de elementos

Descobrir se um certo elemento está na coleção40

Conjuntos Indagar sobre atributos

Obter o número de elementos

Como se vê, as operações são semelhantes, embora diferentes, daquelas para uma Lista

41

HashSet É um conjunto não-ordenado e não-

classificado baseado em uma tabela Hash

Quando utilizar ?

Quando quiser um conjunto sem duplicatas e não for necessário uma ordem na interação

42

Tabelas Hash É uma das melhores maneiras de

armazenar informações para pesquisa rápida

Armazena informações utilizando um cálculo especial no objeto para escolher a localização na tabela para armazená-lo

Para recuperar a informação utiliza-se o mesmo cálculo

43

HashSet - Construtores HashSet( )

Cria uma tabela hash com 101 depósitos e com um fator de carga 0,75

HashSet(int capacidadeIncial)

Constrói um conjunto hash com a capacidade especificada

HashSet(Collection elementos)

Constrói um conjunto de hash e inclui todos os elemetos de uma coleção

44

HashSet - Construtores HashSet(int capacidadeInicial, float

fatorCarga)

Constrói um conjunto hash com a capacidade e o fator de carga especificados.

45

HashSet Utiliza o código de hash do objeto que

estar sendo inserido por meio do método hashCode()

O método hashCode() é definido na classe Object◦ Portanto, todo objeto tem um código de

hash padrão

Classes Strings e Wrapper (Integer, Double, ...) redefinem equals() e se tornam adequadas para serem utilizadas como chave em HashSet e TreeSet

46

TreeSet É semelhante ao conjunto classificado

Garante que os elementos fiquem em ordem crescente de acordo com a sua ordem natural

Construtores

TreeSet() Constrói uma árvore vazia

TreeSet(Collection elementos) Constrói uma árvore e inclui todos os elementos de

uma coleção

47

TreeSet

48

Comparação Comparação de Objetos Como comparar um objeto qualquer???

Como TreeSet sabe a ordem que você deseja ???◦ Resposta: o TreeSet assume que foi

implementado a interface Comparable

Várias classes da plataforma Java implementam a interface Comparable. Exemplo: String

49

Comparação Comparação de Objetos

Para comparar os seus objetos é preciso implementar a interface Comparable, pois não existe uma implementação padrão em Object

Para implementar o método int compareTo() da interface Comparable, retorne:

Um inteiro menor que zero se objeto atual for “menor” que o recebido como parâmetro

Um inteiro maior que zero se objeto atual for “maior” que o recebido como parâmetro

Zero se objetos forem iguais50

Exemplo

51

Exemplo

52

Classes que implementam a interface MapHashMap, TreeMap, HashTable

Interface Map Coleção que usa objetos para indexar

objetos (chave valor)

Tanto a chave quanto o valor são objetos

Chaves são unívocas (Set)

Valores podem ser duplicados (Collection)

54

Interface Map A chave é utilizada para inserir, remover e

achar um elemento rapidamente

As operações serão baseadas no código hashda chave através da invocação do método hashCode()

Em relação às chaves O Mapa pode ser mantido ordenado (TreeMap) ou não (HashMap)

55

Interface Map – principais métodos

Object put(Object key, Object value)

associa uma chave a um valor no mapa. Se a chave já estiver presente o novo valor substitui o anterior e retorna o valor antigo ou null, caso a chave não esteja presente

corresponde ao método add(Object obj) de Collection

Object get(Object key)

recupera um objeto associado a uma chave ou null caso a chave não exista

56

Interface Map – principais métodos Set keySet()

◦ retorna um conjunto com todas as chaves do mapa. Podemos remover elementos desse conjunto e o valor removido e suas chaves serão removidos do mapa, mas não é possível incluir

Collection values()◦ retorna uma Collection com todos os

valores do mapa. Pode-se remover elementos desse conjunto e o valor removido e suas chaves serão removidos do mapa, mas não é possível incluir

57

Interface Map – principais métodos

Set entrySet()

retorna um conjunto de pares chave-valor contendo objetos representados pela interface interna Map.Entry. Pode-se remover elementos desse conjunto e o valor removido e suas chaves serão removidos do mapa, mas não é possível incluir

58

public static interface Map.Entry

Interface interna usada para manter pares chavevalor em qualquer implementação de Map

Principais métodos:

Object getKey() - retorna a chave

Object getValue() - retorna o valor dessa entrada

59

public static interface Map.Entry

60

HashMap Fornece um conjunto Map não-ordenado e

não-classificado

Quando se precisar de um mapa e não estiver preocupado com a ordem (na interação), então HashMap é a melhor opção. TreeMap e LinkedHashMap adicionam um pouco mais de sobrecarga

61

HashMap Construtores

HashMap()

HashMap(Map entradas)

HashMap(int CapacidadeInicial)

HashMap(int CapacidadeInicial, float fatorCarga)

62

HashMap

63

HashMap

64

HashMap

65

Outra alternativa as coleções do J2SE

Commons Collections, do projeto Apache Jakarta

Define coleções que são utilizadas por inúmeros softwares do grupo Apache (commons-collections.jar)

66

top related