将一个字符串值存储在一个空的链表中
Storing One String Value in an empty LinkedList
public class LinkedListExplained {
public Node head;
public Node tail;
public int size;
public LinkedListExplained() { // Constructor
head = null;
tail = null;
size = 0;
}
public class Node{ // Inner Class
String value;
Node next;
}
public void add(String value){
Node node = new Node();
node.value = value;
size++;
if (head == null){
head = node;
tail = node;
return;
}
tail.next = node;
tail = node;
}
问题,将单个String值存储到空LinkedList时,是否存储了两次相同的值?
一次当头,一次当尾?
没有。 head
和 tail
变量指向同一个 Node
对象。该对象包含 String
一次。
如果你正在学习Java,你首先需要了解的是在Java中,任何看起来像对象的东西实际上都不是对象;它是一个指向对象的指针。当然两个指针可能指向同一个对象。
因此,语句 public Node head;
没有声明 Node
的实例。它声明了一个指向 Node
实例的指针。这就是为什么您以后必须使用 new Node();
。
因此,由于您将 head
和 tail
指针都设置为指向 Node
的同一个实例,因此看起来您有该节点的两个副本,但实际上你没有。您只有一个 Node
实例,并且有两个指针指向它。
public class LinkedListExplained {
public Node head;
public Node tail;
public int size;
public LinkedListExplained() { // Constructor
head = null;
tail = null;
size = 0;
}
public class Node{ // Inner Class
String value;
Node next;
}
public void add(String value){
Node node = new Node();
node.value = value;
size++;
if (head == null){
head = node;
tail = node;
return;
}
tail.next = node;
tail = node;
}
问题,将单个String值存储到空LinkedList时,是否存储了两次相同的值? 一次当头,一次当尾?
没有。 head
和 tail
变量指向同一个 Node
对象。该对象包含 String
一次。
如果你正在学习Java,你首先需要了解的是在Java中,任何看起来像对象的东西实际上都不是对象;它是一个指向对象的指针。当然两个指针可能指向同一个对象。
因此,语句 public Node head;
没有声明 Node
的实例。它声明了一个指向 Node
实例的指针。这就是为什么您以后必须使用 new Node();
。
因此,由于您将 head
和 tail
指针都设置为指向 Node
的同一个实例,因此看起来您有该节点的两个副本,但实际上你没有。您只有一个 Node
实例,并且有两个指针指向它。