首页 > 解决方案 > 从 TreeMap 克隆对象中删除元素不会从 java 中的主 treemap 对象中删除

问题描述

我阅读了以下有关的逻辑TreeMap

该方法返回实例TreeMap.clone()的浅拷贝。TreeMap在浅拷贝中,对象 B 指向内存中的对象 A 位置。换句话说,对象 A 和 B 共享相同的元素。键和值本身不会被克隆。

考虑到这一点是正确的,我根据链接问题制作了一个程序,其中我从treemap克隆对象中删除了一个元素,我的期望是这个元素也必须从主树形图对象中删除,但它没有发生。我也检查了这两个对象的密钥哈希码,但它是相同的。有人可以告诉我,TreeMap 中的浅拷贝是不同的,还是我的理解不正确?JDK - 1.8

标签: javaclonetreemapshallow-copy

解决方案


您的理解有些不正确(来自我的pov..sry!:)

我的理解是“键值相同”,但克隆的地图不(相同)!并且作为地图的一部分是一种信息,它既不是键也不是值“知道”,而只有地图/容器......并且该信息在克隆后由每个地图拥有(复制和)。

如果您检查了 s ...,我会同意您的误解/观察Map.Entry<K, V>(这些对于基础键和值也是未知的)。

并且在克隆之后,如果您希望克隆同步,您/某人必须确保它。


如果您确实想要同一映射的“两个引用”(预期行为),您“只是”共享/传递对该映射的引用(但要注意并发,“通常”的 Map 实现不是线程安全的):

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

在“深拷贝”下,我理解,“键和值”(甚至更深)也会被克隆。


推荐阅读