【问题标题】:For HashMap, is it more efficient to use compute() or put()对于HashMap,使用compute()还是put()效率更高
【发布时间】:2022-01-22 13:22:50
【问题描述】:

我已经尝试环顾了一段时间,但找不到具体的答案,并且仍然无法准确理解 HashMapcompute 方法的作用。

我目前的理解是compute 将允许您操作该值但不能将其设置为新值(例如垃圾收集器必须摆脱旧对象的位置),而@987654324 @ 只会删除旧对象并设置它(例如 x = new Something)。

如果我对此的理解是错误的,请告诉我,但无论如何,compute 方法通常更有效吗?我应该尽可能在put 上使用它还是只在某些情况下使用它?

【问题讨论】:

    标签: java hashmap


    【解决方案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复杂多了:

    1. 它调用get 来检索当前值。
    2. 它调用提供的重映射函数将其转换为新值。
    3. 它要么调用put 覆盖旧值,要么调用remove 删除它,具体取决于新值是否为空。

    由于最终调用putcompute 有更多的步骤并且更慢。如果put 满足您的需求——您不关心地图中的内容,您只想将键设置为值——使用put

    【讨论】:

      猜你喜欢
      • 2019-02-14
      • 2012-02-29
      • 2012-01-21
      • 1970-01-01
      • 1970-01-01
      • 2013-01-16
      • 2011-10-08
      • 2020-12-02
      • 2016-02-19
      相关资源
      最近更新 更多