Essa “lista” é um TAD (Tipo Abstrato de Dados).
E ela pode ser implementada em várias linguagens.
Ela é baseada em “chave única”, ou seja, cada elemento
terá um número que o identificará.
Ela só usa alocação de memória dinâmica.
Não usa mais nenhuma classe java.
Eu não coloco o código fonte aqui pois ele é muito grande.
Os métodos são:
inserirFinalDaLista(Obj)
inserirInicioDaLista(Obj)
inserirEmDeterminadaPosicao(Obj, Posicao)
inserirAntesDoElementoTal(Obj, Obj)
inserirDepoisDoElementoTal(Obj,Obj)
inserirOrdenado(Obj)
…
excluirPrimeiro
excluirUltimo
excluirElementoTal
excluirDaPosicaoTal
…
cursorVaParaPrimeiro
cursorVaParaUltimo
cursorAvancar
cursorRetroceder
…
buscaElementoComListaOrdenada(chave)
buscaElementoNaoOrdenado(chave)
buscaPosicaoDeUmElemento(chave)
…
Resumindo:
public class ListaEncadeada {
}
(é a classe que eu descrevi acima.)
Essa classe deve servir pra fazer diversos tipos de listas.
Sem que seu código fonte seja editado.
Se eu quizer criar uma lista de aluno, eu consigo.
Se eu quizer criar uma lista de professores, eu consigo.
Somente criando outras classes e fazendo uso dessa classe ListaEncadeada.
Ex: class Aluno / class Professores / etc…
A classe ListaEncadeada possue métodos que necessitam acessar
métodos de outras classes. Então através do conceito de “interface java” eu consigo garantir que estes métodos estejam presentes nestas classes.
Que métodos são esses?
- setChaveUnica // seta chave para um objeto*
- getChaveUnica // pega a chave do objeto*
*Essencial para busca na lista.
Então agora que vamos a minha dúvida!
Eu possuo uma classe aluno, esta classe efetua o cadastro do aluno,
digamos que ela faz o seguinte:
…nome / idade / chave
Aluno umAluno = new Aluno (Rodrigo, 18 , 12345)
Então na classe ListaEncadeada
public void insereNoFinal (Aluno umAluno) {
}
Ou seja ela recebe o obj umAluno coloca ele na lista.
Porém, se eu decidir criar uma lista de professores?
…nome / idade / chave
Professor umProfessor = new Professor (Rafael, 55 , 13543)
public void insereNoFinal (Professor umProfessor) {
}
Ou seja, eu tenho que dar um jeito para que indepentende do
tipo de objeto que a lista receba, ele insira o elemento na lista.
Algo genérico deste tipo:
public void insereNoFinal (Object objQualquer) {
}
Se uma classe der:
Professor umProfessor = new Professor (Rafael, 55 , 13543)
Ele vai interpretar o Object objQualquer como Professor umProfessor,
e vai adicionar na lista.
Aluno umAluno = new Aluno (Rodrigo, 18 , 12345)
Ele vai interpretar o Object objQualquer como Aluno umAluno,
e vai adicionar na lista.
E nessa classe ListaEncadeada eu também utilizo métodos desse tipo:
objQualquer.getChave() deve referenciar à umAluno.getChave();
objQualquer.getChave() deve referenciar à umProfessor.getChave();
// Métodos necessários para comparar a chave que o usuário procura, com a chave única de cada elemento.
Obs: Eu não usarei dois tipos diferentes de objetos juntos, como misturar professores e alunos na mesma lista. Esta classe ira para programas diferentes. Porém, o professor quer que a classe ListaEncadeada seja identica para os dois.
Acho que não tenho como ser mais detalhista do que isto.
Se alguém tiver alguma dúvida só perguntar.
Obrigado, desde já.