Java 中的复制方法



我正在尝试将一个列表复制到另一个列表中,我还有其他方法,例如删除,当我测试它们时,复制方法似乎正在编辑原始列表。

复制方法如下所示。

public ImmutableList<T> copy(ImmutableLinkedList<T> list) {
Node n = list.head;
ImmutableLinkedList<T> listcopy = new ImmutableLinkedList<T>();
listcopy.head = list.head;
copynode(list.head.next, listcopy.head.next);
return listcopy;
}
private Node copynode(Node list, Node listcopy){
if(list == null){
return listcopy;
} else{
listcopy.data = list.data;
listcopy.next = list.next;
return copynode(list.next, listcopy.next);
}
}

已将代码更改为此,但仍然无法正常工作

public void copy(ImmutableListImplement<T> list) {

ImmutableListImplement<T> listcopy = new ImmutableListImplement<T>();
this.head = copynode(list.head, listcopy.head);

}
private Node copynode(Node list, Node listcopy){

if(list == null){
return listcopy;
} else{
listcopy = new Node();
listcopy.data = list.data;
listcopy.next = list.next;

copynode(list.next, listcopy.next);
}
return listcopy;
}

>listcopy.head是对原始列表的 head 元素的引用。它根本不是副本。然后你把它作为参数listcopy传递给copynode方法,copynode弄乱其中的条目。

实际上,在第 6 行的copynode()调用中list.head.next==listcopy.head.next(如 in,两者都指向完全相同的 Node 对象(。这就是问题所在。

如果您尝试连接多个不可变列表,则可以使用静态内部类 ImmutableList.Builder。

List<String> list = new ArrayList<>( 
Arrays.asList("4", "5", "6"));
ImmutableList<String> iList = ImmutableList.<String>builder() 
.add("1", "2", "3")
.addAll(list) 
.build(); 
System.out.println(iList); 

输出: [1,2,3,4,5,6]

相关内容

  • 没有找到相关文章

最新更新