Java Containers Walfredo Cirne walfredo dsc ufpb br
Скачать презентацию Java Containers Walfredo Cirne walfredo dsc ufpb br
1e3749a6f31b5ee770519731b9a44dd9.ppt
Java Containers Walfredo Cirne walfredo. dsc. ufpb. br
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
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)
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)
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 binary. Search( ), acha um elemento em um array ordenado – as. List( ), 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
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
List • Array. List é um array que cresce por demanda – Bom para acesso randômico • Linked. List é uma lista duplamente encadeada – Bom para alterações no meio da lista
Hash. Set • Hash. Set é 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 hash. Code()
Tree. Set • • Tree. Set é uma árvore vermelho-preta Acesso logarítmico Provê garantia de ordem Objetos incluídos tem que implementar compare. To() • Ou então um Comparator precisa ser fornecido na criação do objeto Tree. Set
Map • Um Map guarda um objeto em associação com uma chave – A Pesquisa é feita pela chave, que é única – Um Map é um array associativo • Hash. Map implementa Map usando hash dinâmico (rápido e desordenado) • Tree. Map implementa Map usando árvore vermelho-preta ("lento" e ordenado)
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
import java. util. *; public class Mice. And. Cats { public static void main( String[] args ) { Array. List Mice = new Array. List(); 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 } }
import java. util. *; public class Mouse. List { private Array. List list = new Array. List(); public void add( Mouse m ) { list. add( m ); } public Mouse get( int index ) { return ( Mouse )list. get( index ); } public int size() { return list. size(); } }
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? : -)
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 • has. Next() retorna se há um próximo objeto • remove() apaga o último elemento retornado
Iterator: Exemplo class Printer { static void print. All( Iterator e ) { while( e. has. Next() ){ System. out. println(e. next()); } } }
Deprecated Containers • Hashtable é um Hash. Map synchronized e que não permite null • Vector é um Array. List synchronized • Stack é uma subclasse de Vector que implementa Pilha