1

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

例如

地图1:

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

其他地图Map2:

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

fun (Map1, Map2) 执行后的结果有以下输出

地图2:

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

遍历较小的映射并检查内容(键,值)是遍历较小的映射并检查较大映射中的键和内容是最有效的方法。

4

4 回答 4

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

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

于 2009-05-07T08:23:34.970 回答
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);
}
于 2009-05-07T08:36:33.283 回答
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);
    }
}
于 2009-08-13T04:50:49.353 回答
0

请参阅java.util.Collection

boolean removeAll(Collection<?> c)
于 2009-05-07T08:09:35.843 回答