我有一個線性鏈表由節點組成:深線性的副本鏈表
class Node{
Object data;
Node link;
public Node(Object pData, Node pLink){
this.data = pData;
this.link = pLink;
}
public String toString(){
if(this.link != null){
return this.data.toString() + this.link.toString();
}else{
return this.data.toString() ;
}
}
public void inc(){
this.data = new Integer((Integer)this.data + 1);
}
public Node copy(){
return new Node(this.data, this.link.copy());
}
}
我想打表的深層副本。然後增加原始列表的每個節點並同時打印。我不知道代碼是否正確。
class Aufg1{
public static void main(String args[]){
Node node3 = new Node(new Integer(3), null);
Node node2 = new Node(new Integer(2), node3);
Node node1 = new Node(new Integer(1), node2);
System.out.println(node1.copy().toString());
System.out.println(node1.toString());
}
}
...給我第二個println只有123,但副本有些問題。有任何想法嗎?
更新:
public Node copy(){
if(this.link != null){
return new Node(new Integer((Integer)this.data), this.link.copy());
}else{
return new Node(new Integer((Integer)this.data), null);
}
}
即使您正在進行深度複製,也不要創建Integer的副本。即使是深層複製也不需要複製不可變對象,因爲它們本質上可以安全共享。另外,如果你知道並依賴'data'是一個Integer,爲什麼不把它聲明爲這樣呢? – 2011-01-13 22:20:02
謝謝,我改變那個整數東西 – 2011-01-13 22:25:20