如何在hashmap b中找不到hashmap a中的值

时间:2012-07-27 20:08:26

标签: java hashmap

我有两个不同的查询结果的哈希图,虽然2个哈希图是不同大小的hashmap,我正在尝试查找hashmap A中不存在的记录,这些记录存在于hashmap B中。

到目前为止我会发布我的代码;我通过sql进行了比较,得到了我想要的结果,但是当我试图把它放在代码中时,我没有成功。我希望你能指出我正确的方向。提前致谢

HashMap<Integer, HashMap<String, Object>> mapA = new HashMap<>();
HashMap<Integer, HashMap<String, Object>> mapB = new HashMap<>(); 

int m=0;

for (int j = 0; j < mapA.size(); j++) {
    for (int k = 0; k < mapB.size(); k++) {
        if (!mapA.get(j).get("folio").toString().equals(
             mapB.get(k).get("folio").toString())) {
            m++; // count many records not exist on mapB
        }
    }
}
System.out.println(m);

2 个答案:

答案 0 :(得分:1)

我不确定我理解你的做法。更合适的方法是(伪代码):

For each element in Hashmap A:
  If !HashmapB.contains(element):
    ++Counter;

答案 1 :(得分:1)

逻辑中存在错误。您希望找到A记录中不存在,但每次迭代HashMaps的值不相等时都会递增计数器(在这种情况下,您将获得更大的m)。你的代码应该是这样的。

for (int j = 0; j < mapA.size(); j++) {
    boolean found=false;
    for (int k = 0; k < mapB.size(); k++) {
        if (mapA.get(j).get("folio").toString().equals(
            mapB.get(k).get("folio").toString())) {
            found=true;   
            break;
        }
    }

    if (!found){
       m++; // count many records not exist on mapB
    }
}

还有其他可能的错误。在一般情况下,你不得不在toString方法之后进行比较,而是比较对象(我认为你没有对象的ovverite toString方法返回有效的标识符来比较它们。在大多数情况下,它将不会返回你需要的东西。或者在换句话说,你应该使用ovveride等于散列图中所有可能对象的方法,并使用下一个代码进行比较:

mapA.get(j).get("folio").equals(mapB.get(k).get("folio"))

在你的情况下(使用toString),comparision可以返回false,因为典型的toString返回对象的类和ID。