2017-01-25 48 views
-3

我對Java很新,我試圖在java中實現一個通用LinkedList類。下面是代碼,但它並不正確。本學期我有一些額外的空閒時間,並希望使用這個通用鏈表來解決我的面試考試準備書中的鏈表編程挑戰。我在這裏做錯了什麼?爲什麼不按照我想要的方式工作?實現一個通用類型Java LinkedList

感謝您的幫助提前。

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

請準確描述哪種方式不符合您的要求。 – Eran

+0

是解釋你期望什麼,你得到什麼,而不是你的期望 –

回答

2

您首先會花一些關於Java命名約定的閱讀。類名開始大寫;總是;即使是內部靜態類。你也可以避免首先使用太多的內部靜態類。在你的例子中,絕對沒有必要這樣做。您寧願將組成LinkedList的方法直接放在LinkedList類上。您希望該類的用戶使用該類;而不是像LinkedList.linkedlist或LinkedList.Node這樣的內部靜態事物。

你看,現在,你的方法都在內部節點類。那麼,您是否每次在處理List時都要處理節點

然後你讀了關於泛型是如何工作的。例如:

Node one = new Node(1); 

可能甚至沒有編制,但即使是這樣,它會創建一個原料類型;當你做不是那裏有類型參數。你需要的東西,如:

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

而是 - 你必須告訴編譯器要使用的,而不是匿名T.

換句話說什麼是真正的類型:開始閱讀here。現在,你有25%的知識/理解;這還不足以開始編碼。

這是關於什麼可以說,沒有從你身邊進一步描述你的代碼中的「什麼是不工作」。即使如此:如上所述;你的代碼的「理解」程度如此之低,以至於唯一合理的答案是:退一步,瞭解你想要使用的東西。

相關問題