实现通用类型Java LinkedList

时间:2017-01-25 07:15:05

标签: java generics linked-list

我是Java的新手,我正在尝试在java中实现Generic 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;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您首先会阅读有关Java命名约定的一些内容。类名称以大写字母开头;总是;甚至对于内部静态类。您也可以避免首先使用太多内部静态类。在您的示例中,绝对不需要这样做。您更愿意将组成LinkedList的方法直接放在LinkedList类上。您希望该类的用户使用该类;而不是像LinkedList.linkedlist或LinkedList.Node那样的内部静态东西。

您现在看到,您的方法都在内部的 Node 类中。那么,每次对你的List做些什么时,你想要处理 Nodes 吗?

然后你会了解泛型如何工作。例如:

Node one = new Node(1);

可能甚至没有编译,但即使这样做,它也会创建一个原始类型;正如您所做的那样具有类型参数。你需要这样的东西:

Node<Integer> one = new Node<>(1);
而不是 - 你必须告诉编译器你要使用什么样的真实类型而不是那个匿名的T。

换句话说:开始阅读here。现在,你有25%的知识/理解;这还不足以开始编码。

关于可以说什么,如果没有你方面的进一步描述&#34;什么不起作用&#34;在你的代码中。即便如此:如上所述;你的代码规模如此之低&#34;理解&#34;唯一合理的答案是:退后一步,了解你想要使用的东西。