【问题标题】:Checking contents of a map in another map in java在java中检查另一个地图中的地图内容
【发布时间】:2009-08-13 12:50:49
【问题描述】:

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

例如

地图1:

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

其他地图 地图2:

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

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

地图2:

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

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

【问题讨论】:

  • 奇怪的问题 :) 如果两张地图的长度相同会发生什么???
  • 要么我不太明白你的问题,要么你的例子有错误。如果 map2 的键作为键存在于 map1 中,是否要删除它的映射条目?
  • 据我所知,结果是一张新地图,其中包含 Map2 中不在 Map1 中的所有对象

标签: java maps


【解决方案1】:
m1.entrySet().removeAll(m2.entrySet());

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

【讨论】:

    【解决方案2】:
    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);
    }
    

    【讨论】:

      【解决方案3】:

      java.util.Collection

      boolean removeAll(Collection<?> c)
      

      【讨论】:

      • Map 具有返回 Set 的 keySet() 方法。设置扩展集合。
      • entrySet() 而不是 keySet()。他想通过完整的映射来查找和删除,而不仅仅是按键。
      【解决方案4】:
      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);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2017-08-30
        • 2021-08-26
        • 1970-01-01
        • 1970-01-01
        • 2021-03-07
        • 2012-12-04
        • 1970-01-01
        • 2011-03-16
        • 2021-07-17
        相关资源
        最近更新 更多