java - 从 TreeMap 克隆对象中删除元素不会从 java 中的主 treemap 对象中删除
问题描述
我阅读了以下有关的逻辑TreeMap
:
该方法返回实例TreeMap.clone()
的浅拷贝。TreeMap
在浅拷贝中,对象 B 指向内存中的对象 A 位置。换句话说,对象 A 和 B 共享相同的元素。键和值本身不会被克隆。
考虑到这一点是正确的,我根据链接问题制作了一个程序,其中我从treemap
克隆对象中删除了一个元素,我的期望是这个元素也必须从主树形图对象中删除,但它没有发生。我也检查了这两个对象的密钥哈希码,但它是相同的。有人可以告诉我,TreeMap 中的浅拷贝是不同的,还是我的理解不正确?JDK - 1.8
解决方案
您的理解有些不正确(来自我的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" ..
在“深拷贝”下,我理解,“键和值”(甚至更深)也会被克隆。
推荐阅读
- python - 在python列表中的每个元素之后删除n个元素
- tailwind-css - nx:在库中使用 @tailwind 关键字
- html - 我可以在网页中每个字母有相等的空间吗?
- c - 为什么 C 编程中需要 fortran 包装器?
- reactjs - 如何在 react 和 axios 中对所有请求进行分组?
- react-native - “找不到 com.android.tools.build: gradle: 4.2.2。”
- arrays - 字符指针数组不应该打印指针吗?为什么它打印它指向的字符串?
- r - 创建参数变量
存储参数变量 - wicket - 如何正确呈现 GridView 组件中的第一列?
- reactjs - 如何使用 Jest 和 Enzyme 测试功能组件中的 if 条件?