Java:查找两个HashMaps的匹配键

时间:2014-05-09 10:27:36

标签: java hashmap comparison

我有两个HashMaps,比如说HashMapA和HashMapB。找到两个HashMaps中存在的密钥的有效方法是什么?我目前的实现如下:

Integer key;

/* create iterator */
Iterator<Map.Entry<Integer, Foo>> it = HashMapA.entrySet().iterator;

/* iterate through HashMapA using iterator*/
while (it.hasNext()) {

    key = it.next().getKey();

    if (HashMapB.containsKey(key)) {

        /* matching key found */
        System.out.println("Got one: " + key);

    }

}

这似乎有效,但看起来安静无效。有什么像

Integer keyInBothMaps = HashMapA.containsKeyOf(HashMapB);

2 个答案:

答案 0 :(得分:2)

您可以使用Set.retainAll

这是一个丑陋的例子:

Map<String, String> m0 = new HashMap<String, String>();
m0.put("a", "a");
m0.put("b", "b");
Map<String, String> m1 = new HashMap<String, String>();
m1.put("c", "c");
m1.put("b", "b");
Set<String> s = new HashSet<String>(m0.keySet());
s.retainAll(m1.keySet());
System.out.println(s);

<强>输出

[b]

答案 1 :(得分:2)

您正在查看地图的键,因此请从keySet();

开始

然后,您可以查看Set界面并查看方法retainAll

http://docs.oracle.com/javase/8/docs/api/java/util/Set.html#retainAll-java.util.Collection-

这会给你:

map1.keySet().retainAll(map2.keySet())

但是,这将修改地图,因此您应该复制集:

new HashSet<>(map1.keySet()).retainAll(map2.keySet())