Buscar

LPI 07 - Lista Dinâmica - Classe Genérica - Tipo Enumerado

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.

Outros materiais

Materiais relacionados

Perguntas relacionadas

Perguntas Recentes