0

我不明白的文字是:

除了它(地图接口的)明显使用将一个地图转储到另一个地图之外,它还有第二个更微妙的用途。假设一个 Map 用来表示一个属性值对的集合;putAll 操作与 Map 转换构造函数相结合,提供了一种使用默认值实现属性映射创建的简洁方法。以下是演示此技术的静态工厂方法。

  static <K, V> Map<K, V> newAttributeMap(Map<K, V>defaults, Map<K, V> overrides) {
      Map<K, V> result = new HashMap<K, V>(defaults);
      result.putAll(overrides);
      return result;
  }

您可以标题“地图接口批量操作”下找到它

4

2 回答 2

1

您可以使用putAll()方法将另一个地图的元素添加到此地图。在这种情况下命名它是overrides为了告诉您,它覆盖了已经存在于defaults. 即,如果默认值包含键值对 A->B,并且在覆盖中出现 A->C,则生成的映射将仅包含 A->C。

或者如果默认值包含 A->B 并且覆盖包含 D->E,例如 A.equals(D),则结果映射将只有 A(或 D,因为两者都相等)->E。

提到的静态方法返回一个新的Map,它defaultsoverrides(具有优先级)结合并返回它。对于使用的那个方法Map map = new HashMap(defaults);构造函数与putAll方法相结合。

于 2013-01-02T05:41:03.470 回答
1

它说您可以加载默认键值对并仅覆盖它们中的选定子集(或者甚至所有它们,如果您选择的话)。

例如,您想使用用户提供的键值创建一个映射。让我们说,用户不需要为所有键提供值的部分或全部键有安全默认值。

因此,您使用默认值创建一个映射,调用者只提供他想要覆盖的那些。在这种情况下,您将需要覆盖调用者提供的那些键的值。您可以使用上述机制在看似单一的调用中实现此目的,而不是一一进行。

于 2013-01-02T05:41:36.797 回答