2017-01-25 122 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%的知识/理解;这还不足以开始编码。

这是关于什么可以说,没有从你身边进一步描述你的代码中的“什么是不工作”。即使如此:如上所述;你的代码的“理解”程度如此之低,以至于唯一合理的答案是:退一步,了解你想要使用的东西。

相关问题