Here is a very quiet example of implementing a double-chained java list:
Class No:
package teste;
public class No {
private No ant, prox;
private Filme filme;
public No(No ant, No prox, Filme filme) {
this.ant = ant;
this.prox = prox;
this.filme = filme;
}
public No getAnt() {
return ant;
}
public void setAnt(No ant) {
this.ant = ant;
}
public No getProx() {
return prox;
}
public void setProx(No prox) {
this.prox = prox;
}
public Filme getFilme() {
return filme;
}
public void setFilme(Filme filme) {
this.filme = filme;
}
}
Film class
package teste;
import java.util.Date;
public class Filme {
private String nomeFilme;
private Date dataLancamento;
public String getNomeFilme() {
return nomeFilme;
}
public void setNomeFilme(String nomeFilme) {
this.nomeFilme = nomeFilme;
}
public Date getDataLancamento() {
return dataLancamento;
}
public void setDataLancamento(Date dataLancamento) {
this.dataLancamento = dataLancamento;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((dataLancamento == null) ? 0 : dataLancamento.hashCode());
result = prime * result + ((nomeFilme == null) ? 0 : nomeFilme.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Filme other = (Filme) obj;
if (dataLancamento == null) {
if (other.dataLancamento != null)
return false;
} else if (!dataLancamento.equals(other.dataLancamento))
return false;
if (nomeFilme == null) {
if (other.nomeFilme != null)
return false;
} else if (!nomeFilme.equals(other.nomeFilme))
return false;
return true;
}
@Override
public String toString() {
return "Filme [nomeFilme=" + nomeFilme + ", dataLancamento=" + dataLancamento + "]";
}
}
List Class
package teste;
public class Lista {
/*
* Aqui criamos 2 variaveis do tipo No para não perdermos a nossa lista
* imagine a lista como um varal… e os nós como roupas… o ant e prox do nó
* será nossos pregadores e os bambus que seguram o varal são as variaveis
* inicio e fim… se essas variaveis perderem seu valor é como se soltasse o
* fio do varal… continuaremos a ter 2 bambus mas não teremos mais o varal…
*/
private No inicio;
private No fim;
// construtor
public Lista() {
inicializa();
// chama inicializa para economizar codigo
}
public void inicializa() {
inicio = null;
fim = null;
// inicializa faz a lista ficar vazia
}
/*
* ai vem a famoza pergunta…se eu tenho uma lista cheia e pego meu inicio e
* fim e seto eles para que a lista esteja vazia.. e meus nós que ja
* instanciei??? Bom quando um objeto no java (no caso o nó) perde sua
* referencia (no caso o inicio e fim) o próprio java retira da memória o
* que está sobrando quem faz isso é o Garbage Collector… ou como preferir…
* coletor de lixo
*/
// aqui fazemos uma lista para inserir somente no final
public void insereNoFim(Filme filme) {
// declaramos e instanciamos a variavel caixa
// do tipo nó. seu anterior vai ser o fim
// pois estamos inserindo depois do fim
No caixa = new No(inicio, null, filme);
if (inicio == null)// se lista estiver vazia
inicio = fim = caixa;
else {
// seta prox do No do fim para receber caixa
fim.setProx(caixa);
fim = caixa;
}
}
// aqui fazemos uma lista para inserir somente no comeco
public void insereNoComeco(Filme filme) {
// declaramos e instanciamos a variavel caixa
// do tipo nó. seu proximo vai ser o incio
// pois estamos inserindo antes do inicio
No caixa = new No(null, inicio, filme);
if (inicio == null)// se lista estiver vazia
inicio = fim = caixa;
else {
// seta ant do No do inicio para receber caixa
inicio.setAnt(caixa);
inicio = caixa;
}
}
public void exibeLista() {
No aux;
aux = inicio;
while (aux != null) {
System.out.println(aux.getFilme());
aux = aux.getProx();
}
}
public No Busca_Exaustiva(Filme elemento) {
No p = inicio;
while ((p != null) && (p.getFilme() != elemento)) {
p = p.getProx();
}
if ((p != null) && (p.getFilme() == elemento))
return p;
else
return null;
}
// no remove temos 5 casos a considerar
public void removeLista(Filme elemento) {
No pos;
pos = Busca_Exaustiva(elemento);
if (pos != null)// 1- se existe o No a ser deletado
{
if (inicio != fim)// 2- se só existe um Nó na lista
{
if (pos == inicio)// 3- se o Nó esta no começo
{
inicio = pos.getProx();
pos.getProx().setAnt(null);
} else if (pos == fim)// 4- se o Nó esta no fim
{
fim = pos.getAnt();
pos.getAnt().setProx(null);
} else// 5- se o no esta no meio
{
pos.getAnt().setProx(pos.getProx());
pos.getProx().setAnt(pos.getAnt());
}
pos.setAnt(null);
pos.setProx(null);
} else {
inicio = null;
fim = null;
}
} else
System.out.println("Elemento nao encontrado");
}
}
Application class
package teste;
import java.util.Date;
public class Aplicacao {
Lista lista;
public Aplicacao() {
lista = new Lista();
}
public void executa() {
for (int i = 1; i <= 5; i++) {
Filme filme = new Filme();
filme.setDataLancamento(new Date());
filme.setNomeFilme("Matrix " + i);
lista.insereNoFim(filme);
System.out.println("Lista inserindo no final");
lista.exibeLista();
System.out.println("\n\n");
}
Filme filme = new Filme();
filme.setDataLancamento(new Date());
filme.setNomeFilme("Guerra Civil ");
System.out.println("Lista inserindo no inicio ");
lista.insereNoComeco(filme);
lista.exibeLista();
// Removendo alguns elementos
lista.removeLista(filme);
// Lista após remover alguns dos elementos (30,1,5)
System.out.println("\n\nDepois de Remover os elementos");
lista.exibeLista();
}
public static void main(String args[]) {
Aplicacao a = new Aplicacao();
a.executa();
}
}
The code shown is Javascript, so I recommend leaving only the Javascript label and maybe the html tag as well. If the object is something that is not language dependent then remove all tags and Javascript code and put pseudocode indicating tag
independente-de-linguagem
. In addition, if you are trying to create a root list because reason makes use ofnew List()
? And why aren’t you creating the nodes by hand using a Node class for example?– Isac