如何比较Java中的两个哈希映射

时间:2014-11-13 07:56:04

标签: java collections hashmap comparison

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

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

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

在比较这两个哈希图之后,我得到的hashmap将包含Key作为First HashMap1的值,Value作为第二个HashMap2的值。

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

4 个答案:

答案 0 :(得分:8)

只需迭代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));
    }
}

答案 1 :(得分: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);
    }
}

答案 2 :(得分:1)

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

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

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

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

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

答案 3 :(得分:0)

您可以使用以下两个地图的keySet来交叉它们:

boolean     retainAll(Collection<?> c)

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