Capítulo 21. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra



Documentos relacionados
Coleções Avançadas. Programação Orientada a Objetos Java. Prof. Anselmo Cardoso Paiva Prof. Geraldo Braz Junior

BSI UFRPE Prof. Gustavo Callou

Coleções. Page 1. Coleções. Prof. Anderson Augustinho Uniandrade

Laboratório de Programação. Aula 13 Java 5COP088. Aula 13 Genéricos e Conjuntos Java Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr barbon@uel.

Coleções. Conceitos e Utilização Básica. c Professores de ALPRO I 05/2012. Faculdade de Informática PUCRS

Capítulo 22. Associações entre Classes. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

API e Coleções Java. Sérgio Luiz Ruivace Cerqueira

Capítulo 13. Encapsulamento. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Capítulo 9. Vetores e Matrizes. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Java Coleções. Rodrigo C. de Azevedo

Collections. Programação Orientada por Objetos (POO) Centro de Cálculo Instituto Superior de Engenharia de Lisboa

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

Rafael Santos. Instituto Nacional de Pesquisas Espaciais rafael.santos. Rafael Santos - rafael.

Capítulo 11. Conceitos de Orientação a Objetos. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Capítulo 14. Herança a e Polimorfismo. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Java Util Collections - Interfaces Interfaces definidas

Programação Orientada a Objetos. Encapsulamento

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

5 Caso de estudo O cartão fidelidade

Técnicas de Programação Avançada TCC Prof.: Anselmo Montenegro

Lógica de Programação

Curso Java Starter. 1

SUMÁRIO CAPÍTULO 1 INTRODUÇÃO AO JAVA... 1

Programação Java. em Ambiente Distribuído. Ênfase no Mapeamento Objeto-Relacional com JPA, EJB e Hibernate. Douglas Rocha Mendes.

Capítulo 19. Algoritmos de Ordenação e de Pesquisa. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Desafios de Programação TCC Turma A-1

INF 2125 PROJETO DE SISTEMAS DE SOFTWARE Prof. Carlos J. P. de Lucena

AULA 12 CLASSES DA API JAVA. Disciplina: Programação Orientada a Objetos Professora: Alba Lopes alba.lopes@ifrn.edu.br

Tipos de Dado Abstrato: Listas, Filas e Pilhas

Capítulo 7. Estruturas de Decisão. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Especificação do 3º Trabalho

RUI ROSSI DOS SANTOS PROGRAMAÇÃO DE COMPUTADORES EM. Java

Guia de Fatores de Qualidade de OO e Java

Trabalho 3: Agenda de Tarefas


Orientação a Objetos

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Orientação a Objetos com Java

Técnicas de Programação II

2ª LISTA DE EXERCÍCIOS CLASSES E JAVA Disciplina: PC-II. public double getgeracaoatual() {return geracaoatual;}

Busca. Pesquisa sequencial

Paradigmas da Programação PPROG. Linguagem JAVA. Interfaces. (Livro Big Java, Late Objects Capítulo 9) Nelson Freire (ISEP DEI-PPROG 2013/14) 1/33

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

4 O Workflow e a Máquina de Regras

Manual de Utilização

BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES

Manual da Turma Virtual: MATERIAIS. Para acessar a turma virtual com o perfil Docente, siga o caminho indicado abaixo:

7 RTTI e Interfaces. Desenvolvimento OO com Java. Vítor E. Silva Souza (vitorsouza@inf.ufes.br)

Programação Orientada a Objetos em java. Polimorfismo

Estruturas de Dados Pilhas, Filas e Deques

Tipos agregados. Tipos estruturados

Implementação de Classe e Auto-Relacionamento em Java

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Tabela de símbolos: tabelas de espalhamento

FBV - Linguagem de Programação II. Um pouco sobre Java

Objetos Implícitos. Conceito. Instanciados pelo próprio contêiner. Disponíveis em quaisquer páginas JSP.

Novell. Novell Teaming 1.0. novdocx (pt-br) 6 April 2007 EXPLORAR O PORTLET BEM-VINDO DESCUBRA SEU CAMINHO USANDO O NOVELL TEAMING NAVIGATOR

JDBC Java Database Connectivity

Exercícios de Revisão Java Básico

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 15

Livro Caixa. Copyright ControleNaNet

Slide 1 Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Modelagem e Implementação (Incremental de um Software para Controle) de Aquário de Peixes

Agendamento para Importação de Notas Fiscais

Alberto Costa Neto DComp - UFS. Coleções

Manual do Painel Administrativo

Coleções. Prof. Marcelo Roberto Zorzan

Membros de classe e de instância. PARTE III: Java e OO - detalhes. Exemplo 1: método. Exercício. Exemplo 1 corrigido

Programação Concorrente em java - Exercícios Práticos Abril 2004

Java Básico. Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp

JSP - ORIENTADO A OBJETOS

Árvores Binárias de Busca

T U T O R I A I S WEB OF SCIENCE TUTORIAL. Biblioteca da Escola de Engenharia da UFRGS. WEB OF SCIENCE - Tutorial

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Manual Operacional SIGA

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira

Algoritmos e Estruturas de Dados II. Trabalho Prático 2

Desenvolvimento de um Simulador de Gerenciamento de Memória

CONTRA CONTROLE DE ACESSOS E MODULARIZADOR DE SISTEMAS

Pag: 1/20. SGI Manual. Controle de Padrões

Pesquisa em Memória Primária. Algoritmos e Estruturas de Dados II

Reuso com Herança a e Composiçã

MODULO DE GESTÃO MANUTENÇÃO DE MATRÍCULA. O módulo de Gestão tem por objetivo gerenciar as atividades que ocorrem durante um ano letivo.

Vendas. Manual do Usuário. Copyright ControleNaNet

SERVIÇO PÚBLICO FEDERAL MINISTÉRIO DA EDUCAÇÃO UNIVERSIDADE FEDERAL DE RORAIMA DIRETORIA DE TECNOLOGIA DA INFORMAÇÃO SIGRH - FREQUÊNCIA

Revisão: Introdução. - Integração com o AutoManager; 1 Atualização de versão do banco de dados PostgreSQL

Tópicos em Engenharia de Computação

Introdução aos cálculos de datas

THREADS EM JAVA. George Gomes Cabral

Windows Explorer. Prof. Valdir

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

2ª Lista de Exercícios

Olimpíada Brasileira de Robótica. Manual de Inscrição. Sistema OLIMPO Instruções

Transcrição:

Capítulo 21 Coleções

Objetivos do Capítulo Analisar o conceito de coleção e sua relação com as estruturas de dados. Apresentar a arquitetura do framework de coleções do Java. Indicar as classes e interfaces do framework de coleções do Java que podem ser empregadas para a representação de cinco diferentes tipos de coleções: listas, pilhas, filas, conjuntos e mapas. Explorar os algoritmos disponíveis no framework de coleções do Java que permitem a realização de diferentes operações sobre coleções e sobre vetores.

Conceito de coleção Introdução Objeto Agrupa múltiplos elementos Organizaos sob determinada forma Realiza diferentes operações sobre eles Coleção & Estrutura de Dados E.D.: define uma forma de organização dos dados Coleção: Estrutura de dados préempacotada Parte integrante da API de determinado ambiente de programação

Coleções no JSE 1.0 Poucas coleções Introdução java.util.vector: vetor de objetos redimensionável java.util.stack: pilha de objetos java.util.hashtable: implementação de uma tabela de hash Criação de bibliotecas de terceiros Coleções no JSE 1.2 Introdução de um framework de coleções JCF: Java Collections Framework Arquitetura bem planejada Acréscimo de várias coleções novas Coleções no JSE 1.5 Reforma do JCF Adaptações para suporte a tipos genéricos

Características do JCF Introdução Arquitetura unificada de componentes Suporte a grande variedade de E.D. Listas Pilhas Filas Conjuntos Mapas Facilidade para extensão Algoritmos para operações com coleções Pesquisa Ordenação

Arquitetura do JCF Camada 1: interfaces Introdução Representam as coleções como TADs Manipulação uniforme da coleção (independente de implementação) Camada 2: classes abstratas São implementações parciais das coleções Reduzem o esforço para criação de novas coleções Camada 3: classes de implementação São classes concretas Oferecem uma implementação completa para a interface de uma coleção

Introdução Hierarquia de interfaces do JCF

Interface java.util.collection Introdução Define os métodos comuns a todas as coleções Não possui nenhuma implementação direta Permite a manipulação uniforme de diferentes tipos de coleções E = elemento Tipos de coleções java.util.list: representa uma lista java.util.queue: representa uma fila java.util.set: representa um conjunto java.util.sortedset: conjunto com elementos ordenados java.util.navigableset: conjunto ordenado e navegável

Interface java.util.map Introdução Representa um tipo especial de coleção: o mapa Mapeia chave para valores Não permite chaves duplicadas Parâmetros de tipo K: chave (key) V: valor (value) Tipos de mapas java.util.sortedmap: mapa com elementos ordenados java.util.navigablemap: mapa ordenado e navegável

Hierarquia de classes do JCF Introdução

Introdução Implementações para coleções

Introdução Métodos da interface Collection boolean add(e e): adiciona um elemento void clear( ): remove todos os elementos boolean contains(object o): se a coleção contém o elemento Pesquisa utiliza o método equals( ) do objeto boolean isempty( ): se a coleção está vazia Iterator<E> iterator( ): retorna um iterator boolean remove(object o): remove um elemento Pesquisa utiliza o método equals( ) do objeto int size( ): retorna a quantidade de elementos Object[] toarray( ): copia os elementos para um vetor T[] toarray(t[] a): copia os elementos para um vetor

Iterator Introdução Objeto que controla a navegação por uma coleção Só suporta navegação unidirecional Métodos da interface java.util.iterator boolean hasnext( ): verifica se ainda há mais um elemento E next( ): avança o cursor e retorna o elemento seguinte Pode disparar uma java.util.nosuchelementexception void remove( ): remove o elemento atual Não é suportado por todas as coleções

Implementações para mapas Introdução AbstractMap: implementação parcial HashMap: implementação completa de um mapa TreeMap: implementação de um mapa ordenado e navegável

Introdução Outros componentes importantes do JCF classe java.util.collections: algoritmos para coleções classe java.util.arrays: algoritmos para vetores interface java.util.listiterator: iterator para listas interface java.lang.comparable: critério único para ordenação interface java.util.comparator: múltiplos critérios de ordenação

Conceito Listas Coleção de elementos em seqüência Permite elementos duplicados Acesso através de índice Suporte à pesquisa e ordenação

Métodos da interface List Listas void add(int index, E element): insere o elemento na posição especificada O método add( ) herdado insere no final E get(int index): recupera o elemento da posição especificada int indexof(object o): retorna o índice da primeira ocorrência int lastindexof(object o): retorna o índice da última ocorrência ListIterator<E> listiterator( ): retorna um iterator que inicia a navegação no início da lista ListIterator<E> listiterator(int index): retorna um iterator que inicia a navegação na posição especificada E remove(int index): remove o elemento da posição especificada E set(int index, E element): substitui o elemento da posição especificada List<E> sublist(int fromindex, int toindex): retorna uma lista composta por parte dos elementos

Listas Métodos da interface ListIterator void add(e e): inclui o elemento na posição anterior ao cursor boolean hasprevious( ): se há um elemento antes do cursor int nextindex( ): retorna o índice do elemento que está após o cursor E previous( ): recupera o elemento anterior e posiciona o cursor antes dele int previousindex( ): retorna o índice do elemento que está antes do cursor void set(e e): substitui o último elemento retornado pelos métodos next( ) e previous( ) Obs.: o cursor deste tipo de iterator sempre permanece entre dois elementos da lista.

Implementações para listas Vector Listas Disponível desde o JSE 1.0 Mecanismo de armazenamento: vetor de objetos Operações sincronizadas (redução de desempenho) Métodos originais coincidentes com métodos da interface List o addelement( ) = add( ) ArrayList Disponível desde o JSE 1.2 Mecanismo de armazenamento: vetor de objetos Capacidade inicial padrão: 10 Redimensionamento: cópia dos elementos para um vetor maior Operações não sincronizadas (aumento de desempenho) ArrayList(int initialcapacity): capacidade inicial customizada ensurecapacity(int mincapacity): garante uma capacidade mínima trimtosize( ): elimina posições não ocupadas

Implementações para listas LinkedList Listas Disponível desde o JSE 1.2 Mecanismo de armazenamento: lista duplamente encadeada Implementação completa da interface List Uniformidade na recuperação, inserção e remoção de elementos o Controle nas duas extremidades Outras aplicações: pilhas e filas

Listas Exemplos ExemploCollection colecao : Collection<Contato> + main (String args[]) exibirestado () + + + + + + + + + nome email : String : String Contato Contato () Contato (String nome, String email) getnome () getemail () setnome (String nome) setemail (String email) tostring () equals (Object obj) hashcode () : String : String : String : boolean : int ExemploListaInclusao lista : List<Contato> + main (String args[]) incluir (int posicao) relatorio () ExemploArrayList lista : List<Contato> + main (String args[]) incluir () excluir () alterar () consultar () relatorio () ExemploLinkedList lista : LinkedList<Contato> + main (String args[]) incluir () excluir () consultar () relatorio ()

Listas Código 21.1 Contato.java public boolean equals( ) if (obj == null) return false; if (getclass()!= obj.getclass()) return false; if (this == obj) return true; final Contato other = (Contato) obj; if (nome == null && other.nome!= null) return false; if (nome!= null && other.nome == null) return false; if (!nome.equals(other.nome)) return false; return true; public int hashcode( ) return 31 + ((nome == null)? 0 : nome.hashcode());

Listas Código 21.2 ExemploCollection.java Atributo: lista de contatos (ArrayList) exibirestado( ): indicar estado e tamanho da lista main( ): Permitir o registro de um número indefinido de contatos Não permitir o registro de dois contatos com o mesmo nome o Exibir mensagem de erro Recuperar a lista de contatos com um foreach Recuperar a lista de contatos com um iterator Exibir o estado da coleção Esvaziar a coleção Exibir novamente o estado da coleção

Listas Código 21.3 ExemploListaInclusao.java Atributo: lista de contatos (ArrayList) incluir(int posicao) Permitir a inclusão de um contato na lista Incluir na posição especificada Não permitir o registro de dois contatos com o mesmo nome relatorio( ) Exibir a lista de contatos registrados main( ): Exibir um diálogo com as três opções do aplicativo Executar o método correspondente

Listas Código 21.4 ExemploArrayList.java Atributo: lista de contatos (ArrayList) incluir(): incluir contato no final da lista Não permitir nome duplicado excluir(): excluir contato com base no nome informado Exibir mensagem de confirmação com dados do contato excluído Se o nome não for encontrado, exibir mensagem de erro alterar(): alterar o email de um contato com base no nome Exibir mensagem de confirmação Se o nome não for encontrado, exibir mensagem de erro consultar(): consultar um registro com base no nome Se o nome não for encontrado, exibir mensagem de erro relatorio(): exibir a lista de contatos registrados

Listas Métodos da classe LinkedList E getfirst( ): retorna o primeiro elemento E getlast( ): retorna o último elemento E removefirst( ): remove o primeiro elemento E removelast( ): remove o último elemento void addfirst(e e): insere elemento no início void addlast(e e): insere elemento no final boolean removefirstoccurrence(object o): remove a primeira ocorrência do objeto especificado boolean removelastoccurrence(object o): remove a última ocorrência do objeto especificado Iterator<E> descendingiterator( ): retorna um iterator para navegar do final para o início da lista

Listas Código 21.5 ExemploLinkedList.java Atributo: lista de contatos incluir(): permitir a escolha do local de inclusão (Início ou Final) excluir(): permitir a escolha do local da exclusão Se a lista estiver vazia, exibir mensagem de erro consultar(): permitir a escolha do local da consulta Se a lista estiver vazia, exibir mensagem de erro relatorio(): exibir a lista de contatos na ordem inversa Utilizar um iterator descendente para recuperar elementos

java.util.stack Pilhas Disponível desde o JSE 1.0 Derivada de java.util.vector Sincronizada = menos eficiência Estrutura poluída: métodos herdados java.util.linkedlist Disponível desde o JSE 1.2 Não sincronizada = mais eficiência Métodos uniformes

Pilhas Código 21.6 ExemploPilha.java Atributo: pilha de textos main() Capte qualquer número de textos e insiraos na pilha (push) Percorra a pilha, recupere e remova todos os seus elementos (pop) Exiba uma mensagem com todos os textos recuperados ExemploPilha pilha : LinkedList<String> + main (String args[])

Filas Código 21.7 ExemploFila.java Atributo: fila de textos main() Capte qualquer número de textos e insiraos na fila (add) Percorra a fila, recupere e remova todos os seus elementos (remove) Exiba uma mensagem com todos os textos recuperados ExemploFila fila : LinkedList<String> + main (String args[])

Filas Métodos da interface java.util.queue boolean add(e e): inclui elemento no final da fila boolean offer(e e): inclui elemento no final da fila E remove( ): remove elemento do início da fila E pool( ): remove elemento do início da fila E element( ): recupera primeiro elemento E peek( ): recupera primeiro elemento Resultado na falha dos métodos Lançam exceções: add( ), remove( ) e element( ) Retornam valor especial: offer( ), pool( ) e peek( )

Classe java.util.priorityqueue Filas Representa uma fila de prioridade Elementos ordenados de acordo com um critério Determinação do critério de ordenação Opção 1: objetos realizam a interface Comparable O método compareto( ) é utilizado Opção 2: uso de um comparador Comparador informado ao construtor da fila O método compare( ) é utilizado

Exemplo de fila de prioridade Fila de pacientes Critérios de ordenação: Filas Primário: gravidade do estado de saúde Secundário: ordem de chegada (número da ficha) gravidade + + + + + * + + MINIMA PEQUENA MEDIA ALTA ALTISSIMA indicador descricao <<Enum>> Gravidade : EnumConstant : EnumConstant : EnumConstant : EnumConstant : EnumConstant : int : String = 1,"Mínima" = 2,"Pequena" = 3,"Média" = 4,"Alta" = 5,"Altíssima" Gravidade (int indicador, String descricao) getindicador () getdescricao () : int : String + + + + + ficha nome gravidade Paciente : int : String : Gravidade setficha (int ficha) setnome (String nome) setgravidade (Gravidade gravidade) tostring () compareto (Paciente outro) ExemploFilaPrioridade fila : Queue<Paciente> + main (String args[]) : String : int

Código 21.8 Gravidade.java Filas Enumeração utilizada para classificar a gravidade do estado de saúde dos pacientes. Código 21.9 Paciente.java Representa o registro de chegada de cada paciente. Atributos: ficha: número que identifica a ordem de chegada nome: nome completo do paciente gravidade: a gravidade de seu estado de saúde Métodos: tostring( ): Ficha nº <ficha>: <nome> (Gravidade <descrição>) compareto( ): define os critérios de ordenação (gravidade/chegada)

Filas Código 21.10 ExemploFilaPrioridade.java Permita o registro de qualquer quantidade de pacientes Solicite o nome e a prioridade como nos diálogos abaixo Utilize um contador para gerar o número da ficha Ao final, recupere e remova todos os elementos da fila Exiba uma mensagem com todos estes elementos

Conceito Conjuntos Coleção que não pode ter duplicatas Abstração dos conjuntos matemáticos API <E> Collection <E> Set HashSet<E> SortedSet <E> NavigableSet <E> TreeSet<E>

Conjuntos Código 21.11 ExemploHashSet.java Crie o conjunto como uma instância da classe HashSet Permita a inclusão de qualquer quantidade de itens de compra Experimente inserir itens repetidos Ao final, liste todos os itens gravados (utilize um laço foreach) ExemploHashSet conjunto : Set<String> + main (String args[])

Conjuntos Código 21.12 ExemploTreeSet.java Crie o conjunto como uma instância da classe TreeSet Permita a inclusão de qualquer quantidade de itens de compra Experimente inserir itens repetidos Ao final, liste todos os itens gravados (utilize um laço foreach) ExemploTreeSet conjunto : Set<String> + main (String args[])

Conceito Mapas Coleção que vincula chaves a valores Chaves não podem ser duplicadas API Map <K,V> AbstractMap<K,V> {abstract} <K,V> SortedMap NavigableMap <K,V> TreeMap<K,V> HashMap<K,V>

Mapas Métodos da interface java.util.map V get(object key): retorna o valor associado à chave indicada V put(k key, V value): adiciona um par de chave/valor Set<K> keyset( ): retorna o conjunto de chaves do mapa V remove(object key): remove a entrada correspondente à chave int size( ): retorna o número de elementos

Mapas Código 21.13 ExemploHashMap.java Crie o mapa como uma instância da classe HashMap Permita a inclusão de qualquer quantidade de siglas e dos significados correspondentes Percorra o mapa e recupere todas as siglas e significados Crie um conjunto (TreeSet) com as chaves do mapa Utilize um laço foreach para percorrer o conjunto ExemploHashMap mapa : Map<String, String> + main (String args[])

Mapas Código 21.14 ExemploTreeMap.java Crie o mapa como uma instância da classe TreeMap Permita a inclusão de qualquer quantidade de siglas e dos significados correspondentes Percorra o mapa e recupere todas as siglas e significados Crie um conjunto (Set) com as chaves do mapa Utilize um laço foreach para percorrer o conjunto ExemploTreeMap mapa : Map<String, String> + main (String args[])

Ordenação de Listas Métodos estáticos da classe java.util.collections <T extends Comparable<? super T>> void sort(list<t> list) <T> void sort(list<t> list, Comparator<? super T> c) <T> Comparator<T> reverseorder( ) void reverse(list<?> list) void shuffle(list<?> list)

Ordenação de Listas Código 21.15 OrdenacaoSimples.java Crie uma nova lista (LinkedList) Permita a inclusão de qualquer quantidade de textos Ordene os elementos após a inclusão de todos Recupere e apresente a lista de todos os elementos da lista OrdenacaoSimples lista : List<String> + main (String args[])

Ordenação de Listas Código 21.16 OrdenacaoInversa.java Crie uma nova lista (LinkedList) Permita a inclusão de qualquer quantidade de textos Ordene os elementos após a inclusão de todos Ordem alfabética descendente Use um comparador Recupere e apresente a lista de todos os elementos da lista OrdenacaoInversa lista : List<String> + main (String args[])

Ordenação de Listas Comparable <T> FunNomeComparator + compare (Funcionario func1, Funcionario func2) : int + +... matricula nome salario Funcionario : int : String : double tostring () compareto (Funcionario outro)... : String : int... OrdenacaoPersonalizada lista : List<Funcionario> + main (String args[]) incluir () ordenar () inverter () desordenar () exibir () Comparator (util) <T> FunSalarioComparator + compare (Funcionario func1, Funcionario func2) : int

Ordenação de Listas Código 21.17 Funcionario.java tostring( ): Funcionário <matrícula>: <nome> <salário> compareto( ): ordenação padrão (pela matrícula) Código 21.18 FunNomeComparator.java compare( ): ordenação pelo nome Código 21.19 FunSalarioComparator.java compare( ): ordenação pelo salário

Ordenação de Listas Código 21.20 OrdenacaoPersonalizada.java Instanciação do atributo: LinkedList main(): exibir opções e invocar métodos correspondentes incluir( ): permitir a inclusão de qualquer número de registros ordenar( ): ordenar com base em opção do usuário inverter( ): inverter a ordem dos registros desordenar( ): reorganizar aleatóriamente os registros exibir( ): apresentar a lista de funcionários registrados

Pesquisa Binária em Listas Métodos estáticos da classe java.util.collections <T> int binarysearch(list<? extends Comparable<? super T>> list, T key) O retorno é a posição da chave (ou 1) Os elementos devem realizar a interface comparable Os elementos devem estar ordenados pela ordem natural <T> int binarysearch(list<? extends T> list, T key, Comparator<? super T> c) O retorno é a posição da chave (ou 1) Os elementos devem estar ordenados de acordo com o comparador

Pesquisa Binária em Listas Código 21.21 ExemploPesquisaBinaria.java Instanciação do atributo: LinkedList main(): exibir opções e invocar métodos correspondentes incluir( ): permitir a inclusão de qualquer número de registros pesquisar( ): exibir as opções de pesquisa e invocar os métodos correspondentes Métodos: pesquisarpelamatricula( ), pesquisarpelonome( ) e pesquisarpelosalario( ). Se a chave for localizada, apresentar a posição em que se encontra Se a chave não for localizada, exibir uma mensagem de erro exibir( ): apresentar a lista de funcionários registrados ExemploPesquisaBinaria lista : List<Funcionario> + main (String args[]) incluir () pesquisar () pesquisarpelamatricula () pesquisarpelonome () pesquisarpelosalario () exibir ()

Estatísticas de Coleções Métodos estáticos da classe java.util.collections min(): recupera o menor valor de uma coleção max( ): recupera o maior valor de uma coleção frequency( ): frequencia de um objeto dado na coleção

Estatísticas de Coleções Código 21.22 ExemploEstatisticas.java Instanciação do atributo: LinkedList main(): exibir opções e invocar métodos correspondentes incluir( ): permitir a inclusão de qualquer número de registros verlimites( ): exibir o menor e o maior salário verfrequencias( ): exibir os diferentes salários recebidos pelos funcionários cadastrados e a quantidade de funcionários que recebe cada um deles exibir( ): apresentar a lista de funcionários registrados ExemploEstatisticas lista : List<Funcionario> + main (String args[]) incluir () verlimites () verfrequencias () exibir ()

Manipulação de Vetores Métodos estáticos da classe java.util.arrays copyof(): cria uma cópia de um vetor com nova capacidade sort( ): ordena os elementos de um vetor binarysearch( ): realiza uma pesquisa binária Algumas implementações destes métodos public static <T> T[] copyof(t[] original, int newlength) public static void sort(object[] a) public static <T> void sort(t[] a, Comparator<? super T> c) public static int binarysearch(object[] a, Object key) public static <T> int binarysearch(t[] a, T key, Comparator<? super T> c)

Manipulação de Vetores Código 21.23 ExemploVetor.java Inicialmente, instancie o vetor com apenas 2 posições Permita que o usuário grave quantos textos desejar neste vetor Dobre a capacidade do vetor sempre que ela for ultrapassada Após as inclusões, elimine as posições desocupadas Ordene os textos informados Exiba uma mensagem com o conteúdo do vetor Inicie um procedimento para a realização de pesquisas Se o texto for encontrado, indique a sua posição no vetor Caso contrário, indique que ele não foi encontrado ExemploVetor textos : String[] + main (String args[])

Exercício 1 Crie uma classe, chamada Aluno e dois comparadores para ela, chamados AlunoNomeComparator e AlunoNascimentoComparator. Procure implementar estas três classes em conformidade com as especificações contidas no diagrama de classes que é apresentado pela figura abaixo.

Exercício 1 Os métodos de escrita dos três atributos da classe Aluno devem validar os dados recebidos antes de graválos. Se um dado inválido for recebido por algum destes métodos, ele deve disparar uma exceção com uma mensagem que indique a regra que foi violada. Defina você mesmo as regras que serão aplicadas para validar os dados relativos a cada um dos atributos. Implemente o método equals( ) da classe Aluno de forma que duas instâncias desta classe sejam consideradas iguais sempre que tiverem o mesmo valor no atributo que representa a matrícula do aluno. Este atributo também deve ser utilizado na implementação do método hashcode( ) de tal forma que dois alunos com a mesma matrícula também gerem o mesmo código de hash.

Exercício 1 O método compareto( ) deve ser implementado pela classe Aluno em função de ter se comprometido a realizar a interface Comparable. Este método define a ordenação natural das instâncias desta classe. Implemente este método de forma que ele ordene os objetos desta classe com base na matrícula dos alunos. As classes AlunoNomeComparator e AlunoNascimentoComparator, por sua vez, devem ser implementadas de tal modo que possam ser empregadas para realizar a ordenação destes objetos utilizando os atributos nome e nascimento, respectivamente.

Exercício 2 Crie um novo aplicativo, chamado CadastroAluno, que permita realizar o cadastro de alunos. O primeiro diálogo produzido por este aplicativo deve ter as opções que permitam o acesso a todas as operações suportadas por ele. A figura abaixo ilustra qual deve ser a aparência deste diálogo. A operação de inclusão consiste em solicitar a matrícula, o nome e a data de nascimento de um aluno, gravar todos estes dados em uma instância da classe Aluno e adicionar esta instância a uma coleção. Se um dos dados informados for inválido, o aplicativo deve exibir uma mensagem de erro e solicitálo novamente. Se já houver um aluno cadastrado com a matrícula informada, o aplicativo deve exibir uma mensagem de erro e encerrar a operação.

Exercício 2 A operação de exclusão consiste em solicitar a matrícula de um aluno e excluir o objeto correspondente da coleção. Se a coleção estiver vazia, uma mensagem de erro deve ser exibida e esta operação deve ser encerrada. Se a matrícula informada não for válida, uma mensagem de erro deve ser exibida e ela deve ser solicitada novamente. Se não houver nenhum aluno cadastrado com a matrícula informada, deve ser exibida uma mensagem de erro e a operação deve ser encerrada. A operação de alteração consiste em solicitar a matrícula de um aluno, em localizar a posição onde seu cadastro foi gravado na coleção e permitir que seu nome e sua data de nascimento sejam atualizados. Se não houver nenhum cadastro gravado, o aplicativo deve exibir uma mensagem de erro e encerrar a operação. Se um dado inválido for informado, o aplicativo deve exibir uma mensagem de erro e solicitálo novamente. Se não houver nenhum aluno cadastrado com a matrícula informada, uma mensagem de erro deve ser exibida e a operação deve ser encerrada.

Exercício 2 A operação de consulta consiste em solicitar a matrícula de um aluno, em recuperar seu nome e data de nascimento e apresentálos através de uma mensagem. Se não houver nenhum cadastro gravado, o aplicativo deve exibir uma mensagem de erro e encerrar a operação. Se a matrícula informada for inválida, uma mensagem de erro deve ser exibida e ela deve ser solicitada novamente. Se não houver nenhum aluno cadastrado com a matrícula informada, uma mensagem de erro deve ser exibida e a operação deve ser encerrada. A operação de ordenação consiste em permitir que se escolha uma opção de ordenação para os cadastros de alunos que se encontram gravados na coleção. Se não houver nenhum cadastro gravado, o aplicativo deve exibir uma mensagem de erro e encerrar a operação. Devese permitir a escolha de uma de três opções: ordenálos pela matrícula, pelo nome ou pela data de nascimento.

Exercício 2 O relatório deve apresentar os dados de todos os alunos cadastrados através de uma mensagem gráfica. Se não houver nenhum cadastro gravado, uma mensagem de erro deve ser exibida e a operação deve ser encerrada.

Exercício 3 Crie um novo aplicativo, chamado SorteioNumeros, que realize o sorteio de dez números inteiros. Os números sorteados devem ser exibidos através de uma mensagem gráfica similar à que é ilustrada pela figura abaixo. Os números sorteados não podem ser inferiores a 101 e não podem ser superiores a 200. Não deve ser permitido que um mesmo número seja incluído duas vezes no resultado do sorteio. Estes números devem ser apresentados em ordem crescente. Armazene os números sorteados em um tipo de coleção que facilite a realização desta operação.

Exercício 4 Crie um novo aplicativo, chamado ValidadorDelimitadores, que capte uma expressão qualquer e indique se todos os delimitadores abertos foram fechados adequadamente. A figura abaixo ilustra o seu funcionamento.

Exercício 4 A expressão deverá ser informada através de um diálogo gráfico. Somente três tipos de delimitadores devem ser analisados por este aplicativo: chaves, colchetes e parênteses. Qualquer outro caractere deve ser ignorado para fins de avaliação da expressão. Utilize uma pilha de caracteres para implementar a solução para o problema proposto. Adicione cada delimitador de abertura que for encontrado a esta pilha. Sempre que um delimitador de fechamento for encontrado na expressão, verifique se o delimitador de abertura correspondente se encontra no topo da pilha. Caso eles não coincidam, registre o erro. Se um delimitador de fechamento for encontrado quando a pilha estiver vazia ou se não houver nenhum delimitador de fechamento para um delimitador de abertura, registre o erro.

Contato Com o autor: Rui Rossi dos Santos Email: livros@ruirossi.pro.br Web Site: http://www.ruirossi.pro.br Com a editora: Editora NovaTerra Telefone: (21) 22185314 Web Site: http://www.editoranovaterra.com.br