想比较两个哈希映射并删除它们

时间:2014-06-19 10:53:42

标签: java

我有两个哈希映射,如下所示

FieldType是一个JAXB对象。

Map<String, FieldType> onsDetailsMap    =   new LinkedHashMap<String, FieldType>();
Map<String, FieldType> uxDetailsMap =   new LinkedHashMap<String, FieldType>();

我试图比较&#39; Key&#39;两个hashmap。如果两个键相等,我需要获取&#39;键&#39;它是JAXB对象,写入另一个hashmap并将其从实际的hashmap中删除。

尝试使用hashmap.remove(key)将其删除但是它抛出了java.util.ConcurrentModificationException

for (String key : onsDetailsMap.keySet()) {
if (uxDetailsMap.containsKey(key)) {

    System.out.println("BOTH :: " +key);
    onsDetailsMap.remove(key);

}else {

       System.out.println("ONS only :: " +key);
}

4 个答案:

答案 0 :(得分:3)

您无法在for循环中迭代map并同时从此地图中删除条目。 试试这个

Iterator entries = onsDetailsMap.entrySet().iterator();
while (entries.hasNext()) {
  Entry<String, FieldType> entry = (Entry) entries.next();
  if (uxDetailsMap.containsKey(entry.getKey()) {
      System.out.println("BOTH :: " + entry.getKey());
      entries.remove();
  }
}

答案 1 :(得分:1)

 Iterator<String, FieldType> iter = onsDetailsMap.entrySet().iterator();
 while (iter.hasNext()) {
       Entry<String, FieldType> entry = (Entry) entries.next();
       if (uxDetailsMap.contains(entry.getKey()) {          
           iter.remove();
       }
 }

答案 2 :(得分:1)

试试这段代码,它运行良好

Iterator entries = onsDetailsMap.entrySet().iterator();
            while (entries.hasNext()) {
              Entry entry = (Entry) entries.next();
              if(!uxDetailsMap.containsKey(entry.getKey()))
              {
                  System.out.println("Single value:: " + entry.getKey());
                  entries.remove();
              }
            }

答案 3 :(得分:0)

for (Iterator<Map.Entry<String, Integer>> iterator = onsDetailsMap.entrySet().iterator(); iterator.hasNext();) {
        Map.Entry<String, Integer> entry = iterator.next();
        if (uxDetailsMap.containsKey(entry.getKey()))
                iterator.remove();

}
相关问题