深度复制具有集合值的Java Map

col*_*ole 5 java hashmap map

我有一个map(Map<String, Set<String>>),并希望将地图复制到新的地图对象.但是,如果我只是将地图输入到HashMap构造函数(new HashMap<String, Set<String>>(oldMap)),它将不会执行完整副本,并且只复制对该集合的引用,该集合可以被修改,并且这些更改将反映在新地图中.

除了迭代每个键/值对并HashSet为每个集创建一个新的然后将其添加到地图之外,是否有更简单的方法来执行完整副本?

Tim*_*m B 1

这里有一些关于深度克隆的讨论:

Java HashMap - 深拷贝

但在这种情况下这很困难,因为新地图和场景需要自行重建。您还需要克隆 Set 的内容吗?如果是这样,那么您可以序列化然后反序列化整个集合。

自我迭代几乎肯定会更快,并且可以让您控制克隆的深度。序列化会比较慢,但只要对象树中的所有内容都是可序列化的,它就会复制对象树中的所有内容并维护循环引用等内容。(例如,如果映射中有 2 个键指向同一个 Set 对象,则迭代会将其分成 2 组,序列化将维护链接)。