这是我书中的一个例子。在我看来,当您用这个类创建一个列表时,您会创建两个对象(first
和last
,它们为null)。当您在add方法中同时放置第一个和最后一个"Node"对象时,我不明白为什么。当你同时设置first = n
和last = n
时,它不应该创建两个元素吗。例如,如果我调用list.add(2)
,那么first
和last
现在不应该都是2吗?
public class List {
private Node first = null;
private Node last = null;
public List(){
first = null;
last = null;
}
private static class Node{
public int value;
public Node next;
public Node ( int value, Node next){
this.value = value;
this.next = next;
}
}
public void add (int value){
Node n = new Node (value,null);
if(first==null){
first = n;
last = n;
}else{
last.next = n;
last = n;
}
}
public int size(){
int number = 0;
Node n = first;
while(n != null){
number++;
n = n.next;
}
return number;
}
}
正如我所看到的,当你用这个类创建一个列表时,你会创建两个对象(第一个和最后一个,都是null)。
这不是真的。first
和last
不是对象,而是对对象的引用。在这种情况下,它们一开始是null引用,这意味着它们根本不引用任何对象。
编写first = n; last = n;
时,将first
和last
设置为都引用同一对象—不管n
指的是什么对象。
例如,如果list.add(2),那么现在第一个和最后一个不应该都是2吗?
是的,它们都将引用同一个Node
实例,其value
为2。
是的,我认为需要第一个和最后一个。如果您有出列(先删除)或搜索(我想这可以从最后而不是从开始进行,对于简单的线性搜索来说,相同的过程),那么稍后的第一个可能会更有用。
至于你的问题。是的,如果您从一个空白列表开始,并说列表。add(2)。第一个和最后一个都将指向值为2的节点。这是因为列表中的第一个元素和最后一个元素相同,因此列表中有1个元素。它既是第一个也是最后一个(如果你想变得奇怪的话,也可以是中间的)。
但是如果你做了list.add(1),list.aadd(2)。你会得到第一个=node.value==1,第二个=node.value==2