繁体   English   中英

将不可变转换为可变 map java

[英]Converting immutable to mutable map java

我有一个不可变的 map,我从另一部分的方法中得到。 在处理时,我想从中删除一个密钥,然后进一步使用它,该密钥始终位于 map 上。

    ImmutableMap<String, Object> immutableMap =  doSomethingAndGetImmutableMap();
    
    // convert to mutable
    Map<String, Object>  newMutableMap =  ??

    newMutableMap.remove("pin");
   
    // other code

是否有任何内置方法可以将不可变转换为可变 map java? 我看到有几种相反的方法,但不是从不可变到可变 map。

我使用 Maps.newHashMap 但它是最好和最有效的方法吗?

您可以使用复制构造函数从现有的Map简单地创建一个新的HashMap

 HashMap<String, Object> = new HashMap<>(immutableMap);

请注意,这是一个全新的 object。 没有办法使不可变的 map 可变。 那将打破抽象。 我想从概念上讲,您可以为不可变的 map 设计可变包装器,该包装器将更改存储在第二个(私有)map 结构中。 但番石榴似乎并不支持这一点。


这是还是Maps.newHashMap性能更高?

Guava Maps.newHashMap(map)只返回new HashMap<>(map) 该调用将由 JIT 编译内联,因此一旦代码被 JIT 编译,现代 JVM 的性能差异应该为零。

你几乎肯定是在浪费你的时间来微优化这种东西:

  • 您应该首先设计和编写应用程序代码并让它工作。
  • 然后你对它进行基准测试。
  • 然后,您从基准测试结果中决定应用程序是否需要优化。
  • 然后你分析它以确定性能热点在哪里。
  • 然后优化性能热点。

除非有什么非常奇怪的事情,否则按照上述程序会导致你不会浪费时间问这个问题。 套用1 Donald Knuth:

“过早的优化是万恶之源”


1...过度简化/断章取义...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM