【发布时间】:2012-06-22 17:34:40
【问题描述】:
我正在从 ehcache 中获取一个 Map<String , List> 对象。我不想更新那个Map 对象,而是想将缓存的Map 的内容复制到一个临时的Map 中。如何创建Map 的副本,以便更改主Map 中的值不会同时更改副本中的值。
【问题讨论】:
我正在从 ehcache 中获取一个 Map<String , List> 对象。我不想更新那个Map 对象,而是想将缓存的Map 的内容复制到一个临时的Map 中。如何创建Map 的副本,以便更改主Map 中的值不会同时更改副本中的值。
【问题讨论】:
这真的取决于你想做什么。如果你只需要一个浅拷贝,Paul的回答就足够了,或者执行以下操作
Map<String, Object> fromEhcache = ...
Map<String, Object> copy = new HashMap<String, Object>(fromEhcache);
但是,如果您需要深度复制,即您还需要复制地图中的所有对象,则必须遍历整个地图,并单独复制每个对象。另外,地图中的对象必须支持某种复制构造函数。
【讨论】:
您可以创建一个新的Map 实例,然后调用putAll(Map),传入原来的Map。这会将所有键值映射复制到新实例中。
如果你使用的是Guava,你也可以调用Maps.newHashMap(Map)等一行代码实现同样的效果。
【讨论】: