2012-05-02 4 views
0

У меня есть Hashmap <integer, Arraylist<Double>>. Я хотел бы сделать его копию. Я думал об использовании метода clone hashmap. После прохождения Javadoc, это говорит следующее:Копия листа

clone 
Returns a shallow copy of this HashMap instance: the keys and values themselves are not cloned. 

Что означает эта мелкая копия? Я хочу отдельную матрицу, значения которой не изменяются при обновлении значения исходной матрицы.

Кроме того, почему же,

if(hm1 == hm1.clone()) 

возвращает ложь?

ответ

8

Неглубокая копия означает, что только объект карты создан новым, но его значения не клонированы, то есть копия содержит ссылки на старые записи. Таким образом, чтобы «глубокий клон» карта вам нужно будет сделать:

  1. создать новый объект хэша-карту
  2. итерации по всем записям в старой карте и добавить (глубоким) клонам ключа и Значение для новой карты

Потому что == сравнивает ссылку на объект, а не содержимое карты.

+0

Не является ли мелкая копия, что оригинал и копия фактически распределены по тому же адресу? Это означает, что если вы измените значение единицы, то и другое будет изменено? (для C++) – phantasmagoria

+0

@phantasmagoria Нет, на Java это будет всего два указателя на один и тот же экземпляр. – vaughandroid

+0

@Baqueta Хорошо, 2 указателя, указывающие на один экземпляр. Следовательно, изменение одного приведет к тому, что другое изменится на самом деле правильно? (Вы начали с «Нет», но мы говорим о том же, что и я.) – phantasmagoria

0

Карта имеет ключи (целые экземпляры в вашем случае) и значения (ArrayLists). В клонированной карте все ключи и значения будут одинаковыми.

Э.Г. у вас есть Целое число k1 = новое целое число (1); Arraylist value1 = new Arraylist();

оригиналMap.put (k1, value1);

В clonedMap все ключи - это тот же самый экземпляр, созданный для k1. то же самое для значения.