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

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

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

Apresentações semelhantes


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

1 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 –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 "Java Containers Walfredo Cirne walfredo.dsc.ufpb.br."

Apresentações semelhantes


Anúncios Google