无法理解docs.oracle上Java Map界面的一部分

时间:2013-01-02 05:32:51

标签: java hashmap

我不理解的文字是:

  

除了它(Map接口)明显使用将一个Map转储到另一个Map之外,它有   第二个,更微妙的用途。假设Map用于表示a   属性 - 值对的集合; 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;
  }

您可以在“地图界面批量操作”标题下找到它here

2 个答案:

答案 0 :(得分:1)

您可以使用putAll()方法将其他地图的元素添加到此地图中。在这种情况下,它被命名为overrides,告诉您,它会覆盖defaults中已存在的键值对。即,如果默认值包含键值对A-> B,并且在覆盖中得到A-> C,则得到的映射将仅包含A-> C。

或者如果默认值包含A-> B并且覆盖包含D-> E,那么A.equals(D),则得到的映射将仅具有A(或D两者相等) - &gt; E.

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

答案 1 :(得分:1)

它表示您可以加载默认键值对,并仅覆盖它们的选定子集(如果您选择,则覆盖所有子集)。

例如,您希望使用用户提供的键值创建地图。让我们说,对于部分或全部密钥,存在安全默认值,用户无需为所有密钥提供值。

因此,您使用默认值创建地图,并且调用者仅提供他想要覆盖的地图。在这种情况下,您将要覆盖调用者提供的那些键的值。您可以使用上述机制在看似单一的调用中实现此目的,而不是一个接一个地执行此操作。