我有一个不可变的映射,它是从另一部分的方法中获得的。当处理时,我想从中删除一个密钥,然后进一步使用它,密钥总是在地图上。
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。。。过于简单化/断章取义