A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Walfredo Cirne walfredo.dsc.ufpb.br

Apresentações semelhantes


Apresentação em tema: "Walfredo Cirne walfredo.dsc.ufpb.br"— Transcrição da apresentação:

1 Walfredo Cirne walfredo.dsc.ufpb.br
Java Containers Walfredo Cirne walfredo.dsc.ufpb.br

2 Armazenando Objetos Qualquer programa não-trivial cria objetos para os quais não há referências explicitas Estruturas de Dados servem exatamente para armazenar estes objetos Diferentes estruturas de dados variam nas operações permitidas e na performance de cada operação Java contém uma série de estrutura de dados em java.util

3 Arrays  Containers Arrays são um objeto especial de Java, com sintaxe especialmente definida int A[] = new int[10]; fortemente tipado Containers são objetos “comuns” parte do pacote java.util fracamento tipado (usa Object)

4 Arrays Array é um tipo embutido da linguagem Array é um objeto
fortemente tipado sintaxe especial para uso Array é um objeto referências são utilizadas Array é uma sequência linear de acesso randômico o tamanho do array não pode ser alterado o método lenght() retorna o tamanho do array Array é eficiente (embora não seja flexivel)

5 Utilitários para Array
java.util.Arrays contém métodos estáticos para manipulação de arrays equals( ), compara se dois arrays são iguais fill(), preenche um array com um valor sort(), ordena o array binarySearch( ), acha um elemento em um array ordenado asList( ), permite que um array seja manipulado como uma lista System.arraycopy( ) copia mais rápido que um loop com a atribuição de cada elemento

6 Containers

7 Collection Armazenamento de objetos
List é uma collection que tem noção de ordem Set é uma collection que não contém objetos duplicados Collection, List e Set são interfaces

8 List ArrayList é um array que cresce por demanda
Bom para acesso randômico LinkedList é uma lista duplamente encadeada Bom para alterações no meio da lista

9 HashSet HashSet é um hash dinâmico Acesso rápido
constante com boa função hash Não tem garantia de ordem Objetos incluídos tem que implementar hashCode()

10 TreeSet TreeSet é uma árvore vermelho-preta Acesso logarítmico
Provê garantia de ordem Objetos incluídos tem que implementar compareTo() Ou então um Comparator precisa ser fornecido na criação do objeto TreeSet

11 Map Um Map guarda um objeto em associação com uma chave
A Pesquisa é feita pela chave, que é única Um Map é um array associativo HashMap implementa Map usando hash dinâmico (rápido e desordenado) TreeMap implementa Map usando árvore vermelho-preta (“lento” e ordenado)

12 Containers

13 Tipagem Fraca Você perde a informação sobre tipo quando você coloca um objeto no container Portanto, não há restrição ao tipo de objeto que pode ser colocado em um certo container Portanto, ao retirar um objeto de um container, você precisa casteá-lo para o tipo correto

14 import java.util.*; public class MiceAndCats { public static void main( String[] args ) { ArrayList Mice = new ArrayList(); for( int i = 0; i < 7; i++ ) Mice.add( new Mouse(i) ); Mice.add( new Cat(7) ); for( int i = 0; i < Mice.size(); i++ ) ( (Mouse)Mice.get(i) ).print(); // Cat is detected only at run-time } }

15 import java.util.*; public class MouseList { private ArrayList list = new ArrayList(); public void add( Mouse m ) { list.add( m ); } public Mouse get( int index ) { return ( Mouse )list.get( index ); } public int size() { return list.size(); } }

16 Tipos Parametrizados O problema de tipagem fraca dos containers seria elegantemente resolvido se Java suportasse Tipos Parametrizados Suporte a tipos parametrizados permitem que se passe um tipo como parâmetro Quem sabe em Java 3? :-)

17 Iterator Um Iterator é uma abstração que permite percorrer um container sem saber seu tipo Obtém-se um iterator através do método iterator() do container next() retorna o próximo objeto hasNext() retorna se há um próximo objeto remove() apaga o último elemento retornado

18 Iterator: Exemplo class Printer { static void printAll( Iterator e ) { while( e.hasNext() ){ System.out.println(e.next()); } } }

19 Deprecated Containers
Hashtable é um HashMap synchronized e que não permite null Vector é um ArrayList synchronized Stack é uma subclasse de Vector que implementa Pilha


Carregar ppt "Walfredo Cirne walfredo.dsc.ufpb.br"

Apresentações semelhantes


Anúncios Google