Есть ли способ скопировать дважды LinkedList в Java без ссылки? - PullRequest
1 голос
/ 17 мая 2009

Я создаю некоторый двусвязный список типа Double, и независимо от того, как я объявляю другой связанный список того же типа, он всегда ссылается на первый список.

Например:

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

Добавить некоторые вещи в trainingData ...

newData = trainingData;  

Тогда любые изменения, которые я делаю в trainingData после этого назначения, изменяются в newData. Я также пытался передать trainingData в конструктор newData и использовать вложенный цикл для назначения данных trainingData для newData, но он все еще дает мне те же результаты, что и newData ссылается на trainingData.

Ответы [ 2 ]

7 голосов
/ 17 мая 2009

Вам необходимо выполнить итерации внутри списка (ов) и скопировать / клонировать каждый элемент в новый список (ы).

Проблема, с которой вы сталкиваетесь, заключается в том, что LinkedList хранит только внутренние ссылки на содержащиеся в нем элементы. Когда вы копируете список a в список b , вы действительно копируете ссылки из списка a в список b, поэтому любое изменение в исходном списке отражается в новом Скопированный список.

1 голос
/ 17 мая 2009

Это просто копирует ссылку на список, а не его содержимое.

newData = trainingData;

Похоже, вам нужна глубокая копия, что-то вроде

newData = new LinkedList();
for(LinkedList ll: trainingData)
  newData.add(ll.clone());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...