在java中更新地图

时间:2013-08-29 10:38:33

标签: java map hashmap

我有以下地图:

Map <String,String> m; // contains part details
Map <String,String> n; // contains part details
Map <String,String> o; // the new map that contains both m and n. 
  1. 我想先将m的值复制到o中。
  2. 然后我想循环n并将密钥与o进行比较。如果来自n的密钥在o中不存在,则将密钥/值放入o
  3. 我尝试了下面的内容,但第二步不起作用(值不是复制)

    for (Map.Entry<String, String> entry : m.entrySet())
    {
        String key = entry.getKey();
        String value =entry.getValue();
    
        o.put(key, value);
    }
    
    
    for (Map.Entry<String, String> entry : n.entrySet())
    {
        String key = entry.getKey();
        String value =entry.getValue();
    
        for (Map.Entry<String, String> entry1 : o.entrySet())
        {
            String key1 = entry.getKey();
    
             if(key1 != key)
            {
                  o.put(key,value);
            }
    
         }      
    }
    

5 个答案:

答案 0 :(得分:0)

为什么不使用现成的方法?您不必手动全部写入;)。

1)方法putAll()将所有值从一个地图复制到第二个地图。

http://docs.oracle.com/javase/7/docs/api/java/util/Map.html#putAll(java.util.Map)

2)方法containsKey()并且只有一个循环。

答案 1 :(得分:0)

您不必遍历o。

只需使用o.containsKey()方法

答案 2 :(得分:0)

在第二个内部for循环&#34; String key1 = entry.getKey();&#34;它应该是&#34; String key1 = entry1.getKey();&#34; 入口和入口1之间的错误

答案 3 :(得分:0)

  o.putAll(m); // put all m into o
  n.keySet().removeAll(o.keySet()); // Remove all duplicates from n 
  o.putAll(n); // Now add all filtered n to o

答案 4 :(得分:0)

考虑使用Map#containsKey()。您还可以遍历键集,而不是遍历条目集。

for (String key: n.keySet())
{
    if (!o.containsKey(key))
        o.put(key,n.get(key));
}

这应该有效。 我认为问题是你使用的是直接比较字符串,这在你的情况下是不够的(几乎从不),而是使用String#compareTo()方法。