将不可变映射转换为可变映射java



我有一个不可变的映射,它是从另一部分的方法中获得的。当处理时,我想从中删除一个密钥,然后进一步使用它,密钥总是在地图上。

ImmutableMap<String, Object> immutableMap =  doSomethingAndGetImmutableMap();

// convert to mutable
Map<String, Object>  newMutableMap =  ??
newMutableMap.remove("pin");

// other code

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

我使用了Maps.newHashMap,但这是最好、最有效的方法吗?

您只需使用复制构造函数从现有的Map创建一个新的HashMap

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

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


这或Maps.newHashMap更具性能吗?

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

你几乎肯定是在浪费时间对这类东西进行微观优化:

  • 您应该首先设计和编写应用程序代码并使其工作
  • 然后进行基准测试
  • 然后根据基准测试结果来决定应用程序是否需要优化
  • 然后对其进行配置,以确定性能热点在哪里
  • 然后优化性能热点

除非真的有什么奇怪的事情,否则按照上面的程序会让你不会浪费时间问这个问题。套用唐纳德·克努思的话:

"过早的优化是万恶之源">


1。。。过于简单化/断章取义

最新更新