Java:查找两个 HashMap 的匹配键

标签 java hashmap comparison

<分区>

我有两个 HashMap,比如 HashMapA 和 HashMapB。查找存在于两个 HashMap 中的键的有效方法是什么?我当前的实现如下所示:

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);

?

最佳答案

您正在查看 map 的键,因此从 keySet() 开始;

然后可以查看Set接口(interface),看到方法retainAll

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

这给你:

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

但是这会修改 map ,因此您应该复制该集:

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

关于Java:查找两个 HashMap 的匹配键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23562308/

相关文章:

java - 在 HashMap 中多次使用键时无限循环

python - 为什么这个 Python ascii 字符串不等于常规字符串?

java - JFreeChart XYSplineRenderer 分段多项式字符串

Java 8 不带时间成分的日差

java - 不是 "unsafe operation"错误 : Incompatible types Object cannot be converted to Entry<String, boolean 值>

java - 独特的单词缩写替代解决方案?

c - 如何比较双数?

python - 相关词的概率计数/频率?

c# - 如何让我的 Java 应用程序与控制台 C# 应用程序交互?

java - 为什么初始化字符串后得到 null?