Java 从自定义LinkedList数组的addToBack方法引发的NullPointerException
我正在尝试实现LinkedList。在本例中,这些方法功能完美: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 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
不完全是这样,但实际上是这样的。