我有一个不可变的映射,是从另一部分的方法中获得的。当处理时我想从中删除一个密钥然后进一步使用它,该密钥始终在地图上。
ImmutableMap<String, Object> immutableMap = doSomethingAndGetImmutableMap();
// convert to mutable
Map<String, Object> newMutableMap = ??
newMutableMap.remove("pin");
是否有任何内置方法可以将不可变映射转换为可变映射java?我看到有几种方法可以做相反的事情,但不是从不可变映射到可变映射。
我使用了Maps.newHashMap,但它是最好、最有效的方法吗?
您可以使用复制构造函数从现有的
HashMap
创建一个新的 Map
。
HashMap<String, Object> = new HashMap<>(immutableMap);
请注意,这是一个全新的对象。没有办法使不可变的映射变得可变。那将打破抽象。我想从概念上讲,您可以为不可变映射设计可变包装器,该映射将 changes 存储在第二个(私有)映射结构中。但 Guava 似乎并不支持这一点。
这个还是
性能更高?Maps.newHashMap
Guava
Maps.newHashMap(map)
只是返回 new HashMap<>(map)
。该调用将由 JIT 编译内联,因此一旦代码经过 JIT 编译,现代 JVM 上的性能差异应该为零。
您几乎肯定是在浪费时间对此类内容进行微优化:
除非有什么非常奇怪的事情,否则按照上述步骤就不会浪费时间问这个问题。套用1 唐纳德·高德纳 (Donald Knuth):
“过早优化是万恶之源”.
1 ...并且过度简化/断章取义...