2017-01-25 8 views
-3

Ich bin ziemlich neu in Java und ich versuche, eine generische LinkedList-Klasse in Java zu implementieren. Unten ist der Code, aber es funktioniert nicht ganz richtig. Ich habe in diesem Semester etwas mehr Freizeit und möchte diese generische Linkedlist nutzen, um die Herausforderungen der Linkedlist-Programmierung in meinem Vorstellungsbuch für Vorstellungsgespräche zu lösen. Was mache ich hier falsch? Warum funktioniert das nicht so, wie ich es möchte?Implementieren eines generischen Typs Java LinkedList

Vielen Dank für die Hilfe im Voraus.

public class LinkedList { 
    public static linkedlist ll; 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     ll = new linkedlist(); 
     Node one = new Node(1); 
     Node two = new Node(2); 
     Node three = new Node(3); 
     Node four = new Node(4); 
     System.out.println("s"); 
    } 
    public static class linkedlist<T>{ 
     public Node head; 
     public Node tail; 
     int size; 
     @SuppressWarnings("unchecked") 
     public linkedlist(){ 
      size = 0; 
     } 
     void add(Class<T> typeParameterClass){ 
      if(head == null){ 
       head = new Node(typeParameterClass); 
      } 
      Node temp = new Node(typeParameterClass); 
      Node headCopy = head; 
      if(headCopy != null){ 
       while(headCopy.getNext()!= null){ 
        headCopy = headCopy.getNext(); 
       } 
       headCopy.setNext(temp); 
      } 
      size++; 
     } 
    } 
    public static class Node<T>{ 
     //final Class<T> typeParameterClass; 
     Class<T> value; 
     int intValue; 
     Node next = null ; 
     Node prev = null; 
     public Node(Class<T> typeParameterClass){ 
      value = typeParameterClass; 
     } 
     public Node(int i) { 
      intValue = i; 
      // TODO Auto-generated constructor stub 
     } 
     public Node getNext() { 
      // TODO Auto-generated method stub 
      return next; 
     } 
     public Node getPrev() { 
      return prev; 
     } 
     public void setNext(Node temp){ 
      next = temp; 
     } 
    } 
} 
+0

Bitte beschreiben Sie genau, was nicht so funktioniert, wie Sie es wollen. – Eran

+0

Ja erklären, was Sie erwarten und was Sie anstelle Ihrer Erwartungen erhalten –

Antwort

2

Sie würden zunächst etwas über Java-Namenskonventionen lesen. Klassennamen beginnen Großbuchstaben; immer; sogar für innere statische Klassen. Sie würden auch vermeiden, zu viele innere statische Klassen an erster Stelle zu verwenden. In Ihrem Beispiel ist dies absolut nicht nötig. Sie würden lieber die Methoden, die eine LinkedList bilden, direkt in die LinkedList-Klasse einfügen. Sie möchten, dass Benutzer dieser Klasse diese Klasse verwenden; und nicht irgendeine innere statische Sache wie LinkedList.linkedlist oder LinkedList.Node.

Sie sehen, im Moment sind Ihre Methoden alle auf der inneren Node Klasse. Also, willst du mit Knoten arbeiten jedes Mal wenn du etwas über deine Liste tust ?!

Dann lesen Sie, wie Generika im Allgemeinen funktionieren. Beispiel:

Node one = new Node(1); 

ist wahrscheinlich nicht einmal kompilieren, aber selbst wenn sie es tut, es schafft eine Roh Typ; wie Sie nicht haben den Typ Parameter dort. Sie müssen so etwas wie:

Node<Integer> one = new Node<>(1); 

statt - Sie haben den Compiler zu sagen, welche realen Typ Sie statt dieser anonymen T.

Mit anderen Worten verwenden möchten: start here lesen. Im Moment haben Sie 25% Wissen/Verständnis; und das ist nicht genug, um mit der Codierung zu beginnen.

Das ist, was ohne weitere Beschreibung von Ihrer Seite über "was nicht funktioniert" in Ihrem Code gesagt werden kann. Und selbst dann: wie gesagt; Ihr Code ist auf einer so niedrigen Skala des "Verstehens", dass die einzige vernünftige Antwort lautet: Treten Sie zurück und lernen Sie die Dinge kennen, die Sie verwenden möchten.

Verwandte Themen