对于HashMap,使用compute()还是put()效率更高
Posted
技术标签:
【中文标题】对于HashMap,使用compute()还是put()效率更高【英文标题】:For HashMap, is it more efficient to use compute() or put() 【发布时间】:2022-01-22 13:22:50 【问题描述】:我已经尝试环顾了一段时间,但找不到具体的答案,并且仍然无法准确理解 HashMap
的 compute
方法的作用。
我目前的理解是compute
将允许您操作该值但不能将其设置为新值(例如垃圾收集器必须摆脱旧对象的位置),而@987654324 @ 只会删除旧对象并设置它(例如 x = new Something)。
如果我对此的理解是错误的,请告诉我,但无论如何,compute
方法通常更有效吗?我应该尽可能在put
上使用它还是只在某些情况下使用它?
【问题讨论】:
【参考方案1】:如果您想无条件地设置一个新值,请使用put
。如果要根据地图中的现有值计算新值,请使用 compute
。您可以选择将其更改为新值或将其从地图中删除。
documentation for compute
声明:
默认实现等价于对该地图执行以下步骤:
V oldValue = map.get(key); V newValue = remappingFunction.apply(key, oldValue); if (newValue != null) map.put(key, newValue); else if (oldValue != null || map.containsKey(key)) map.remove(key); return newValue;
比简单的put
复杂多了:
-
它调用
get
来检索当前值。
它调用提供的重映射函数将其转换为新值。
它要么调用put
覆盖旧值,要么调用remove
删除它,具体取决于新值是否为空。
由于最终调用put
,compute
有更多的步骤并且更慢。如果put
满足您的需求——您不关心地图中的内容,您只想将键设置为值——使用put
。
【讨论】:
以上是关于对于HashMap,使用compute()还是put()效率更高的主要内容,如果未能解决你的问题,请参考以下文章