【问题标题】:How to compare two Hash Maps in Java如何在 Java 中比较两个哈希映射
【发布时间】:2014-11-13 07:56:04
【问题描述】:

您好,我正在使用 java 中的 HashMap,我有一个场景,我必须比较 2 个 HashMap

HashMap1:
Key: BOF   Value: SAPF
Key: BOM   Value: SAPM
Key: BOL   Value: SAPL

HashMap2:
Key: BOF   Value: Data1
Key: BOL   Value: Data2

在比较这两个哈希图之后,我生成的哈希图将包含作为第一个 HashMap1 的值的键和作为第二个 HashMap2 的值的值。

HashMap3:
Key: SAPF  Value: Data1
Key: SAPL  Value: Data2

【问题讨论】:

  • 根据什么比较?钥匙?价值观?两者都有?

标签: java collections hashmap comparison


【解决方案1】:

只需迭代HashMap1 的键,并为每个键检查它是否存在于HashMap2 中。 如果存在,请将值添加到 HashMap3

final Map<String, String> hm1 = new HashMap<String, String>();
hm1.put("BOF", "SAPF");
hm1.put("BOM", "SAPM");
hm1.put("BOL", "SAPL");

final Map<String, String> hm2 = new HashMap<String, String>();
hm2.put("BOF", "Data1");
hm2.put("BOL", "Data2");

final Map<String, String> hm3 = new HashMap<String, String>();

for (final String key : hm1.keySet()) {
    if (hm2.containsKey(key)) {
        hm3.put(hm1.get(key), hm2.get(key));
    }
}

【讨论】:

    【解决方案2】:

    如果第二个映射具有相同键的值,则遍历第一个映射的键并将值放入新映射中。

    Map map3 = new HashMap();
    for (Object key : map1.keySet()) {
        Object value2 = map2.get(key);
        if (value2 != null) {
            Object value1 = map1.get(key);
            map3.put(value1, value2);
        }
    }
    

    【讨论】:

      【解决方案3】:

      HashMap 有一个名为entrySet() 的方法,它返回一个对象,该对象将映射的内容表示为一组键值对。

      public Set<Map.Entry<K,V>> entrySet()
      

      您应该使用键遍历该集合以在第二个地图中查找,然后将结果放入“结果集”。

      我假设您已确定第一组中的 将是唯一的,或者您不介意条目可能会在输出中被覆盖。

      请注意,迭代器以未指定的顺序在集合中移动,因此如果有覆盖,此方法将无法保证哪些值会覆盖哪些其他值。

      【讨论】:

        【解决方案4】:

        您可以使用两个地图的 keySet 将它们相交:

        boolean     retainAll(Collection<?> c)
        

        然后在构建您的解决方案的 tho 地图上使用该交叉点进行迭代。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多