在java中检查另一个地图中的地图内容

时间:2009-05-07 07:55:03

标签: java maps

我需要编写一小段代码,我需要检查地图的内容(键值),如果它存在于另一个地图中,则将其从地图中删除

E.g

Map1:

1=>obj1
2=>obj21
3=>obj3 
4=>obj4

其他地图 MAP2:

10=>obj10
20=>obj20
2=>obj2
30=>obj30
3=>obj3

乐趣的结果(Map1,Map2) 执行后,它具有以下输出

地图2:

10=>obj10
2=>obj2
20=>obj20
30=>obj30 

迭代较小的地图并检查内容(键,值)是在较小的地图上迭代,并检查较大地图中的关键和内容是最有效的方法。

4 个答案:

答案 0 :(得分:2)

m1.entrySet().removeAll(m2.entrySet());

其中m1是要修改的Map,m2是需要从m1中删除的映射的映射。

答案 1 :(得分:1)

private static <K, V> void fun(Map<K, V> a, Map<K, V> b) {
    Map<K, V> shortestMap = a.size() < b.size() ? a : b;
    Map<K, V> longestMap = a.size() > b.size() ? a : b;

    Set<Entry<K, V>> shortestMapEntries = shortestMap.entrySet();
    Set<Entry<K, V>> longestMapEntries = longestMap.entrySet();

    longestMapEntries.removeAll(shortestMapEntries);
}

答案 2 :(得分:0)

请参阅java.util.Collection

boolean removeAll(Collection<?> c)

答案 3 :(得分:0)

private static <K, V> removeDuplicates(Map<K, V> map1, Map<K, V> map2) {
    for (K key : map1.keySet()) {
        V val1 = map1.get(key);
        V val2 = map2.get(key);
        if (val2 != null && val2.equals(val1)
            map2.remove(key);
    }
}