提问人:oescc 提问时间:1/14/2022 最后编辑:oescc 更新时间:1/14/2022 访问量:6825
将不可变地图Java转换为可变地图Java
Converting immutable to mutable map java
问:
我有一个不可变的地图,我从另一部分的方法中获得。在处理时,我想从中删除一个键,然后进一步使用它,该键始终在地图上。
ImmutableMap<String, Object> immutableMap = doSomethingAndGetImmutableMap();
// convert to mutable
Map<String, Object> newMutableMap = ??
newMutableMap.remove("pin");
// other code
是否有任何内置方法可以将不可变转换为可变地图java?我看到有几种方法可以做相反的事情,但不是从不可变到可变的地图。
我使用了 Maps.newHashMap,但它是最好和最有效的方法吗?
答:
3赞
Stephen C
1/14/2022
#1
您可以使用 copy 构造函数从现有构造函数简单地创建一个新的。HashMap
Map
HashMap<String, Object> = new HashMap<>(immutableMap);
请注意,这是一个全新的对象。没有办法使不可变的地图可变。那将打破抽象。我想从概念上讲,您可以为不可变地图设计可变包装器,该包装器将更改存储在第二个(私有)地图结构中。但番石榴似乎并不支持这一点。
这是性能还是性能更高?
Maps.newHashMap
番石榴只是返回.该调用将由 JIT 编译内联,因此,一旦代码被 JIT 编译,现代 JVM 上的性能差异应该为零。Maps.newHashMap(map)
new HashMap<>(map)
你几乎肯定是在浪费你的时间微优化这些东西:
- 您应该首先设计和编写应用程序代码并使其工作。
- 然后你对它进行基准测试。
- 然后,您可以根据基准测试结果来决定应用程序是否需要优化。
- 然后,对其进行分析以确定性能热点的位置。
- 然后优化性能热点。
除非有非常奇怪的事情,否则遵循上述程序将导致您不会浪费时间问这个问题。套用 1 唐纳德·克努斯(Donald Knuth) 的话:
“过早优化是万恶之源”。
1 ...并过度简化/断章取义......
评论
0赞
oescc
1/14/2022
这是 Maps.newHashMap 的性能更高吗?
评论
ImmutableMap