Lista Encadeada abstrata

Estou começando a aprender lista encadeada com java… ja fiz em C, agora tenho que fazer Orientada a objeto… falta implementar algumas coisas ainda e conferir a lógica em algumas parte…

keria uma sugestão ali onde tem um comentario antes do laço while

e saber o q eu to fazendo de errado que ele ta um erro de Cast, quando executo…
e se a idéia de classe abstrata ta certa… nao sei se as duas classes prefisavam serem abstratas…


public class Main {


    public static void main(String[] args) {
        Dados dado = new Dados(15);
        List<Dados>  lista= new List<Dados>();
        
        lista.insert(dado);
        System.out.println(lista.getfirstNode().getNumero());
        
    }
}
public class List <X> {
    
    private ListNode firstNode;
    private ListNode lastNode;
    private ListNode actualNode;
    private ListNode prevNode;
    
    
    public List(){
        firstNode = lastNode = null;
    }
    
    public boolean comparator(){
        return false;
    }
    
    public X getfirstNode(){
        return (X)firstNode;
    }

    public void insert(X insertObject){
        
        
        if(isEmpty()) {
          firstNode = prevNode = new ListNode<X>((Object) insertObject, null, null);
           
        }
        else {
            ListNode<X> insertItem = new ListNode<X>((Object) insertObject);
            actualNode = firstNode;
            
          
            
          /* aqui nao sei bem o que vou fazer... kero fazer algo pra quem fizer a lista implementar
           algum criterio de ordenação*/
           
          while(comparator()){
              prevNode = actualNode;
              actualNode = firstNode.getNext();
          }
              if(actualNode.getPrev()==null){ //se estiver no fim da lista
                  insertItem.setNext(null);
                  insertItem.setPrev(actualNode);
                  actualNode.setPrev(insertItem);
              }
              else if(actualNode.getPrev() == null){ // se estiver no começo
                  
                  insertItem.setPrev(null);
                  insertItem.setNext(actualNode);
                  actualNode.setPrev(insertItem);
                  
              }
              else {
                  insertItem.setPrev(actualNode);
                  insertItem.setPrev(prevNode);
                  prevNode.setNext(insertItem);
                  actualNode.setNext(insertItem);
                  
              }

        }
    }

    public boolean isEmpty() {
        return firstNode == null;
    }
}

public class ListNode <X> {
    
    Object data;
    ListNode next;
    ListNode prev;
   
    
    public ListNode(Object object, ListNode next, ListNode prev) {
        this.next = next;
        this.prev = prev;
        data = object;
    }
    
    public ListNode(Object object){
        data = object;
    }
    public Object getObject(){
        return this.data;
    }

    public ListNode getNode(){
        return this;
    }
                
    public void setNext(ListNode next){
        this.next = next;
    }
    
    public void setPrev(ListNode prev){
        this.next = prev;
    }
    
    public ListNode getNext(){
        return this.next;
    }
    
    public ListNode getPrev(){
        return this.prev;
    }
    
    public Object getDado(){
        return (X)this.data;
    }
}
public class Dados {
    
    private int numero;
    
    public Dados(int i){
        this.numero = i;
    }
    
    public int getNumero(){
        return this.numero;
    }
}

up

Sugiro a você estudar bastante OO, não se preocupe em aprender estruturas de dados em Java ou na linguagem xyz, o importante são os conceitos. De qualquer forma da uma olhada nessa apostila da Caelum pra ver se lhe ajuda:

http://www.caelum.com.br/caelum/treinamento-cs-14-algoritmos-estruturas-de-dados-com-java.jsp

é que é pra facul…
mas já resolvi aki… vlws.