【问题标题】:Copying cached Map<String , List> object into temporary Map<String , List> object将缓存的 Map<String , List> 对象复制到临时 Map<String , List> 对象中
【发布时间】:2012-06-22 17:34:40
【问题描述】:

我正在从 ehcache 中获取一个 Map&lt;String , List&gt; 对象。我不想更新那个Map 对象,而是想将缓存的Map 的内容复制到一个临时的Map 中。如何创建Map 的副本,以便更改主Map 中的值不会同时更改副本中的值。

【问题讨论】:

    标签: java map ehcache


    【解决方案1】:

    这真的取决于你想做什么。如果你只需要一个浅拷贝,Paul的回答就足够了,或者执行以下操作

    Map<String, Object> fromEhcache = ...
    Map<String, Object> copy = new HashMap<String, Object>(fromEhcache);
    

    但是,如果您需要深度复制,即您还需要复制地图中的所有对象,则必须遍历整个地图,并单独复制每个对象。另外,地图中的对象必须支持某种复制构造函数。

    【讨论】:

    【解决方案2】:

    您可以创建一个新的Map 实例,然后调用putAll(Map),传入原来的Map。这会将所有键值映射复制到新实例中。

    如果你使用的是Guava,你也可以调用Maps.newHashMap(Map)等一行代码实现同样的效果。

    【讨论】:

    • 感谢您的回复...我已经在构造函数中使用了传递 map 并将所有 n 甚至 clone 。但是当我从 map 迭代 List 对象并从 list 更改对象时,它仍然会更改缓存的 Map 对象。任何人都可以建议我们是否有任何 util 方法,例如 BeanUtils copyProperties,它将地图值复制到另一个地图而没有任何链接。
    猜你喜欢
    • 2018-09-22
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 2020-01-26
    相关资源
    最近更新 更多