Olá. Como exercício estou tentando criar uma lista encadeada de forma manual que aceite qualquer tipo de objeto. Só não estou conseguindo retornar meus objetos inseridos:
public class Principal {
public static <T> void main(String[] args) {
ListaEncadeada<String> lista = new ListaEncadeada<>();
String teste1 = "var 1";
String teste2 = "var 2";
String teste3 = "var 3";
lista.add(teste1);
lista.add(teste2);
lista.add(teste3);
String dados[] = lista.getObjeto();
for (String string : dados) {
System.out.println(string);
}
}
}
public class ListaEncadeada<T> {
private Nodo inicio;
private Nodo fim;
private int tamanho = 0;
private int capacidade = 100;
public class Nodo{
Nodo nodoProximo;
private T info;
public Nodo(T obj){
this.info = obj;
}
public void setProximo(Nodo proximo){
this.nodoProximo = proximo;
}
public Nodo getProximo(){
return nodoProximo;
}
public T getInfo(){
return this.info;
}
public void setInfo(T info) {
this.info = info;
}
}
public void add(T obj){
if (this.inicio == null) {
Nodo nodo = new Nodo(obj);
this.inicio = nodo;
this.tamanho += 1;
}else if (this.fim ==null) {
Nodo nodo = new Nodo(obj);
this.inicio.setProximo(nodo);
this.fim = nodo;
this.tamanho += 1;
}else {
Nodo nodo = new Nodo(obj);
this.fim.setProximo(nodo);
this.fim = nodo;
this.tamanho += 1;
}
}
public void remove(T obj){
Nodo nodoTest;
if (inicio.getInfo() == obj) { //se o que quer excluir foi o inicio
inicio = inicio.getProximo();
}else if (fim.getInfo() == obj) { // se for o fim
for (int i = 0; i < this.tamanho; i++) {
nodoTest = inicio;
if (nodoTest.getProximo()==fim) {
nodoTest.getProximo().setInfo(null);
nodoTest.setProximo(nodoTest.getProximo().getProximo());
}
}
}else{ // se for no meio
if (inicio.getProximo()==fim) { // se só tem 2 objetos
fim = inicio;
inicio.setProximo(null);
}else {
for (int i = 0; i < this.tamanho; i++) {
nodoTest = inicio;
if (nodoTest.getProximo().getInfo() == obj) {
nodoTest.getProximo().setInfo(null);
nodoTest.setProximo(nodoTest.getProximo().getProximo());
}
nodoTest = nodoTest.getProximo();
}
}
}
}
public T[] getObjeto(){
T[] retorno = null; //O problema está aqui :(
Nodo nodo = this.inicio;
for (int i = 0; i < this.tamanho; i++) {
retorno[i] = nodo.getInfo();
nodo = nodo.getProximo();
}
return retorno;
}
}