有没有办法在没有引用的情况下在Java中复制双重LinkedList?

时间:2009-05-17 00:03:02

标签: java copy linked-list

我正在创建一个Double类型的双向链表,无论我如何声明另一个相同类型的链表,它总是引用第一个列表。

如:

LinkedList<LinkedList<Double>> trainingData = new LinkedList<LinkedList<Double>>();
LinkedList<LinkedList<Double>> newData = new LinkedList<LinkedList<Double>>();

将一些内容添加到trainingData ...

newData = trainingData;  

然后,在newData中更改此赋值后,我对trainingData所做的任何更改。我也尝试在newData的构造函数中传递trainingData,并使用嵌套循环将trainingData的数据分配给newData,但它仍然给我相同的结果,其中newData引用trainingData。

2 个答案:

答案 0 :(得分:7)

您需要在列表中进行迭代,并将每个元素复制/克隆到新列表中。

您面临的问题是LinkedList仅将内部引用保留在其包含的元素中。将列表 a 复制到列表 b 时,您真正要做的是将列表a中的引用复制到列表b,因此原始列表上的任何更改都会反映到新复制的清单。

答案 1 :(得分:1)

这只是复制对列表的引用,而不是其内容。

newData = trainingData;

您似乎需要的是深层副本,例如

newData = new LinkedList();
for(LinkedList ll: trainingData)
  newData.add(ll.clone());