Olá a todos peço dicas de como implementar uma lista encadeada em java usando genéricos. Minha principal dificuldade está em usar os genéricos neste problema, por isto peço uma dica principalmente nesta parte.
Obrigados a todos.
Olá a todos peço dicas de como implementar uma lista encadeada em java usando genéricos. Minha principal dificuldade está em usar os genéricos neste problema, por isto peço uma dica principalmente nesta parte.
Obrigados a todos.
Adaptando o exemplo que achei na Wikipédia para usar genericos ficou assim:
[code]class No {
Object elemento;
No prox;
No(T elem) {
elemento = elem;
prox = null;
}
}
public class ListaLigada {
private No primeiro, ultimo;
private int nroNos;
ListaLigada() {
primeiro = null;
ultimo = null;
nroNos = 0;
}
public boolean isVazia() {
return (primeiro == null && ultimo == null);
}
public void addInicio(T o) {
nroNos++;
No<T> novoNo = new No<T>(o);
if (isVazia())
ultimo = novoNo;
else
novoNo.prox = primeiro;
primeiro = novoNo;
}
public void addFinal(T o) {
nroNos++;
No<T> novoNo = new No<T>(o);
if (isVazia())
primeiro = novoNo;
else
ultimo.prox = novoNo;
ultimo = novoNo;
}
public int getNroNos() {
return nroNos;
}
/*
* @param posicao posição contada a partir do zero como primeiro elemento
*/
public void addMeio(T o, int posicao) {
nroNos++;
No<T> novoNo = new No<T>(o);
if (posicao <= 1) {
addInicio(o);
return;
}
if (posicao > nroNos) { // Outra abordagem seria lançar exceção para
// posição inválida (>nroNos+1)
addFinal(o);
return;
}
No<T> noTemp = primeiro.prox;
posicao--;
for (int posAux = 1; posAux < posicao; posAux++)
noTemp = noTemp.prox;
novoNo.prox = noTemp.prox;
noTemp.prox = novoNo;
}
public void Remover(T elemento) {
No<T> noTemp = primeiro;
No<T> noAnt = null;
if (primeiro.elemento.equals(elemento)) {
primeiro = primeiro.prox;
nroNos--;
} else {
while (noTemp != null && !noTemp.elemento.equals(elemento)) {
noAnt = noTemp;
noTemp = noTemp.prox;
}
if (noTemp != null) {
noAnt.prox = noTemp.prox;
nroNos--;
}
if (noTemp == ultimo) {
ultimo = noAnt;
}
}
}
public Object BuscarElemento(T elemento) {
int i = 1;
No<T> noTemp = primeiro;
while (noTemp != null) {
if (noTemp.elemento.equals(elemento)) {
return noTemp;
}
i = i + 1;
noTemp = noTemp.prox;
}
return null;
}
}[/code]
Obs: não sei se funciona não fiz testes só copiei e adicionei os genéricos
Até!