1

我有以下地图:

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.

我尝试了以下方法,但第二步不起作用(值未复制)

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

     }      
}
4

5 回答 5

0

为什么不使用现成的方法?您不必手动编写所有内容;)。

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

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

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

于 2013-08-29T10:43:22.987 回答
0

您不必遍历 o。

只需使用 o.containsKey() 方法

于 2013-08-29T10:44:09.447 回答
0

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

于 2013-08-29T10:45:35.187 回答
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
于 2013-08-29T10:50:21.360 回答
0

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

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

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

于 2013-08-29T10:51:22.297 回答