我来自Java背景,不明白为什么在书中给出的解决方案中,最终结果不仅仅是给定参数(数组)的最后一个元素,而实际上它创建了链接列表?
list = {value: array[i], rest: list}
在我的眼中,如果你将 [1,2,3,4] 作为参数传递,那么
value
将依次等于 1、2、3 和最后是 4,不应该有任何链接,但是
rest
将指向与一开始相同的地址,只是现在
value
等于 4。
那么这是如何工作的呢?
以下是 Java 代码示例:
public class Main {
public class MyList{
public int value;
public MyList rest;
}
public static void main(String[] args){
Main main = new Main();
MyList myList = main.new MyList();
for (int i = 0; i < 5; i++) {
myList.value = i;
current.rest = myList;
}
}
}
这是输出结果:
for(int i = 0; i < 5; i++){
System.out.println("Value: " + myList.value + " obj. ref: " + myList.rest);
myList = myList.rest;
}
Value: 4 obj. ref: Main$MyList@1d81eb93
Value: 4 obj. ref: Main$MyList@1d81eb93
Value: 4 obj. ref: Main$MyList@1d81eb93
Value: 4 obj. ref: Main$MyList@1d81eb93
Value: 4 obj. ref: Main$MyList@1d81eb93
为了使其正常工作,我们需要每次创建新对象,因此for循环应该如下所示:
MyList current = myList;
for(int i = 0; i < 5; i++) {
MyList newList = main.new MyList();
current.value = i;
current.rest = newList;
current = newList;
}
输出结果为:
Value: 0 obj. ref: Main$MyList@1d81eb93
Value: 1 obj. ref: Main$MyList@7291c18f
Value: 2 obj. ref: Main$MyList@34a245ab
Value: 3 obj. ref: Main$MyList@7cc355be
Value: 4 obj. ref: Main$MyList@6e8cf4c6
那么在JavaScript中,list
是如何重新实例化的呢?