Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从自定义LinkedList数组的addToBack方法引发的NullPointerException_Java_Arrays_Linked List - Fatal编程技术网

Java 从自定义LinkedList数组的addToBack方法引发的NullPointerException

Java 从自定义LinkedList数组的addToBack方法引发的NullPointerException,java,arrays,linked-list,Java,Arrays,Linked List,我正在尝试实现LinkedList。在本例中,这些方法功能完美: LinkedList list = new LinkedList(); Node newNode = new Node("sarah", 20); list.addToBack(newNode); System.out.println(list.nodeAt(0).getName()); 但在本例中,当我尝试对数组使用相同的方法时,情况并非如此: LinkedList[] list = n

我正在尝试实现LinkedList。在本例中,这些方法功能完美:

    LinkedList list = new LinkedList();
    Node newNode = new Node("sarah", 20);
    list.addToBack(newNode);
    System.out.println(list.nodeAt(0).getName());
但在本例中,当我尝试对数组使用相同的方法时,情况并非如此:

    LinkedList[] list = new LinkedList[3];
    Node newNode = new Node("sarah", 20);
    list[1].addToBack(newNode);
    System.out.println(list[1].nodeAt(0).getName());
对于最后一个示例,我得到以下信息:

    Exception in thread "main" java.lang.NullPointerException
        at Main.main(Main.java:27)
这是调用addToBack方法的行。 方法如下:

public void addToBack(Node newNode) throws NullPointerException {
    if (this.head == null){
        this.head = newNode;
        return;
    }
    Node current = this.head;
    while (current.hasNext()){
        current = current.next;
    }
    current.next = newNode;
    ++size;
}

创建LinkedList()对象数组时,这些索引都是空的。它们实际上并不包含LinkedList,直到您分配它们

list[1] = new LinkedList();
//then you can add objects to it
Node newNode = new Node("sarah", 20);
list[1].addToBack(newNode);

您没有创建对象。您刚刚创建了一个LinkedList数组

LinkedList[] lists = new LinkedList[3]; // Just create the array of linked lists
你必须加上这样的东西

 lists[1] = new LinkedList(); // Create the object at index 1 of the array

 ...


 lists[1].addToBack(newNode);
以书面形式:

LinkedList[] list = new LinkedList[3];
你说这个列表将包含3个链接列表,就是这样。您可以声明
列表将包含的对象类型,但不在内存中为它们保留任何位置。您需要使用
LinkedList
s初始化此列表,才能对其执行任何操作:

for(int i = 0; i < list.length; i++) {
     list[i] = new LinkedList();
}
for(int i=0;i
现在,您可以调用在
列表中进行更改的方法


顺便说一句,我强烈建议不要用官方Java包中包含的名称来命名您自己的实现,因为这会给您或其他阅读您的代码的人带来很多额外的和不必要的工作,因为他们在查看包含
LinkedList
的代码时,最多只希望看到官方
Java.util.LinkedList

不完全是这样,但实际上是这样的。