1

我正在创建一些 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 相同的结果。

4

2 回答 2

7

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

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

于 2009-05-17T00:08:07.873 回答
1

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

newData = trainingData;

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

newData = new LinkedList();
for(LinkedList ll: trainingData)
  newData.add(ll.clone());
于 2009-05-17T05:24:11.610 回答