Baixe o app para aproveitar ainda mais
Prévia do material em texto
Linguagem de Programação I Lista Indexada Dinâmica (ArrayList) Classe Genérica (Template) Tipo Enumerado Comparação de Objetos Joinvile Batista Junior UFGD - LPI 07 - Joinvile Batista Junior 22 Lista Indexada (ArrayList) Lista Dinâmica • cresce (ou decresce) dinamicamente a medida que necessita (ou libera) espaço para comportar itens que são inseridos (ou removidos) Criação de uma lista de Objetos (classe Object) • sem definir capacidade inicial e incremento de capacidade – ArrayList lista = new ArrayList (); • default: capacidade inicial = 10 • definindo capacidade inicial – ArrayList lista = new ArrayList (15) • capacidade inicial = 15 UFGD - LPI 07 - Joinvile Batista Junior 33 Array Dinâmico (ArrayList) Inserção de elemento na lista • Aluno aluno = new Aluno (“Ana Julia”, 18); • no final da lista lista.add (aluno); • no índice específico da lista lista.add (3, aluno); – insere o objeto no índice 3, deslocando os índices seguintes Recuperando um elemento inserido • Aluno aluno = (Aluno) lista.get(3); – é necessária uma conversão de tipos para que o tipo retornado (Object) seja atribuído a uma variável de classe específica (Aluno) Verificando a existência de um elemento • boolean existe = lista.contains (aluno); UFGD - LPI 07 - Joinvile Batista Junior 44 Array Dinâmico (ArrayList) Removendo um elemento • remove o elemento de índice específico – retornando o elemento removido • Aluno aluno = (Aluno) lista.remove (3); – sem retornar o elemento removido • lista.remove(3); • remove a primeira ocorrência do elemento lista.remove (aluno); – retorna false se não existir nenhuma ocorrência na lista Obtém • elemento no índice – Aluno aluno = (Aluno) lista.get (3); • índice correspondente a primeira ocorrência do elemento – int índice = lista.indexOf (aluno); UFGD - LPI 07 - Joinvile Batista Junior 55 Classes Genéricas (Templates) Classes Genéricas • permite definir coleções baseadas em uma classe – exemplo : array dinâmico (ArrayList) de pessoas • ArrayList<Pessoa> pessoas = new ArrayList<Pessoa> (); • dispensa a conversão de tipos na recuperação de um elemento – Pessoa pessoa = lista.get (7); • utilização no comando for para percorrer todas as posições da lista, referenciando, a cada iteração do loop, o próximo objeto inserido na lista for (Pessoa pessoa : pessoas) { System.out.println (pessoa.getNome() + “ tem “ pessoa.getIdade() + “ anos”); } • para inserir objeto na lista – void inserir (Pessoa pessoa) { pessoas.add (pessoa);} UFGD - LPI 07 - Joinvile Batista Junior 66 Iteração Simplificada com Array e ArrayList • iteração com Array Aluno[] alunos = new Aluno[2]; alunos[0] = new Aluno(“Maria”); alunos[1] = new Aluno(“João”); for (Aluno aluno : alunos) { String nome = aluno.getNome(); System.out.println(“nome da aluno: “ + nome); } • iteração com ArrayList ArrayList<Aluno> alunos = new ArrayList<Aluno>(); alunos.addElement(new Aluno(“Maria”)); alunos.addElement(new Aluno(“João”)); for (Aluno aluno : alunos) { String nome = aluno.getNome(); System.out.println(“nome da aluno: “ + nome); } UFGD - LPI 07 - Joinvile Batista Junior 77 Necessidade da Iteração Normal com Array e ArrayList • iteração com Array Aluno[] alunos = new Aluno[2]; alunos[0] = new Aluno(“Maria”); alunos[1] = new Aluno(“João”); System.out.print(“Nome da alunos: “); for (int n = 0; n < alunos.length; n++) { System.out.print(alunos[n].getNome()); if (n < alunos.length - 1) System.out.print(“ – “); } System.out.println(); • iteração com ArrayList ArrayList<Aluno> alunos = new ArrayList<Aluno>(); alunos.addElement(new Aluno(“Maria”)); alunos.addElement(new Aluno(“João”)); System.out.print(“Nome da alunos: “); for (int n = 0; n < alunos.size(); n++) { System.out.print(alunos.get(n).getNome()); if (n < alunos.size() - 1) System.out.print(“ – “); } System.out.println(); UFGD - LPI 07 - Joinvile Batista Junior 88 Enumeração Tipo Enumerado • tipo definido na classe Pessoa – definido na classe que tem mais afinidade com o conceito • classe Pessoa tem afinidade com tipo enumerado EstadoCivil – public enum EstadoCivil { solteiro, casado, separado, divorciado, viúvo } • utilização para definir variáveis – definido e utilizado na mesma classe • EstadoCivil estado_civil = solteiro; • definido na classe Pessoa e utilizado na classe Aplicação – Pessoa.EstadoCivil estado_civil = Pessoa.EstadoCivil.solteiro; • método de conversão do enumerado para string – tipo do parâmetro do método • String stringEstadoCivil (EstadoCivil estado_civil) – switch com variável enumerada switch (estado_civil) – case com elemento enumerado case solteiro: return “solteiro”; UFGD - LPI 07 - Joinvile Batista Junior 99 Comparação de Objetos Comparação entre objetos • comparação entre referências de objetos – somente os operadores relacionais : igual (==), diferente (!=) • comparação de conteúdo de objetos – a classe String define o método equals ( ) que compara o conteúdo de dois objetos String – a classe Object define o método equals ( ) utilizando comparação de referência • equals ( ) deve ser sobreposto pelas classes especializadas • por exemplo para sobrepor o método equals na classe Pessoa, supondo que o nome seja único (chave) boolean equals (Pessoa pessoa) { if ((nome.equals (pessoa.getNome())) return true else return false; } UFGD - LPI 07 - Joinvile Batista Junior 1010 Exercícios - 7 • 7.1 – Crie um programa com as classes entidade Filme e Diretor, e com a classe de controle VideoLocadora. A classe Filme terá o atributo título, a referência a Diretor, e a lista genérica global filmes para armazenar os filmes criados. A classe Diretor terá os atributos nome e idade, e a lista genérica global diretores para armazenar os diretores criados. Crie uma método global em cada classe entidade, para inserir um objeto na lista genérica global. Na classe VideoLocadora crie 2 diretores e 3 filmes, armazene cada objeto nas listas globais das entidades e defina um loop para imprimir para cada filme: título do filme, nome e idade do diretor. • 7.2 –Crie um construtor na classe Diretor somente com o parâmetro nome do Diretor. Crie um método global na classe Diretor que receba um nome de diretor e retorne o objeto correspondente ou null (se não existir o diretor). Crie um construtor para a classe Filme que tenha como parâmetros: título do filme e nome do diretor. O construtor deverá buscar o diretor correspondente ou nome, e criar o diretor somente com seu nome, caso diretor ainda não exista, e então criar o filme com o título e o diretor obtido. Altere a classe VideoLocadora para criar filmes com o título do filme e o nome do diretor, e imprimir, para cada filme: título do filme, nome do diretor. UFGD - LPI 07 - Joinvile Batista Junior 1111 Exercícios - 8 • 7.3 – Agregue o tipo enumerado Categoria na classe Filme, com os seguintes elementos: lançamento, promoção, catálogo. Defina um método global na classe Filme para converter cada elemento no enumerado no string correspondente. Utilize este método para imprimir a categoria do filme na classe de controle VideoLocadora.
Compartilhar