Удаление элемента из клонированного объекта TreeMap не удаляется из основного объекта treemap в java - PullRequest
0 голосов
/ 03 февраля 2019

Я прочитал следующую логику о TreeMap:

Метод TreeMap.clone() возвращает поверхностную копию экземпляра TreeMap.В мелкой копии объект B указывает на местоположение объекта A в памяти.Другими словами, оба объекта A и B совместно используют одни и те же элементы.Сами ключи и значения не клонируются.

Учитывая это правильно, я создал программу по ссылке проблема , в которой я удалил элемент из клонированного объекта treemap и мои ожиданиябыло то, что этот элемент тоже должен был быть удален из основного объекта древовидной карты, но этого не произошло.Я также проверил хэш-код ключа для обоих объектов, но он был одинаковым.Может кто-нибудь, пожалуйста, дайте мне знать, мелкая копия это что-то другое в TreeMap или мое понимание что-то неправильно?JDK - 1,8

1 Ответ

0 голосов
/ 04 февраля 2019

Ваше понимание несколько неверно (из моего пова. Сри! :).

Насколько я понимаю, "ключ и значения одинаковы", но клонированные карты не являются (одинаковыми) !И быть частью карты - это информация, о которой ни ключ, ни значение «не знают», а только карты / контейнеры ... и эта информация (копируется и) принадлежит каждой карте после клонирования.

Я бы согласился с вашим недоразумением / наблюдением, если бы вы проверили Map.Entry<K, V> s ... (они также неизвестны базовым ключам и значениям).

И после клонированиявы / кто-то должен убедиться в этом, если вы хотите, чтобы клоны были синхронизированы .


Если вы действительно хотите "две ссылки" одной и той же карты(ожидаемое поведение), вы «просто» делитесь / передаете ссылку на эту карту (но не упустите параллелизм, «обычные» реализации карты не являются поточно-ориентированными):

 //not: Map<X, Y> copy = original.clone(), but:
 Map<X, Y> ref = original; // then all changes on "original" are "reflected" at "ref" ..

Under "глубокая копия ", я бы понял, что" ключи и значения "(и даже глубже) тоже клонируются.

...