java - 如何查找 hashmap a 中的值在 hashmap b 中是否不存在

标签 java hashmap

我有两个不同的带有查询结果的 HashMap ,尽管这两个 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);

最佳答案

逻辑有问题。您希望找到 A 记录中不存在的记录,但每次迭代 HashMap 的值不相等时都会增加计数器(在这种情况下您将得到更大的 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 方法来返回有效标识符来比较它们。在大多数情况下,它不会返回您需要的内容。或者在换句话说,您应该在 HashMap 中检查所有可能对象的 equals 方法,并使用下一个代码进行比较:

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

在您的情况下(使用 toString),比较可能始终返回 false,因为典型的 toString 返回对象的类和 ID。

关于java - 如何查找 hashmap a 中的值在 hashmap b 中是否不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11694984/

相关文章:

java - 无法读取Java中pdf文件生成的文本

java - 从 ArrayList 输出中删除 [] 并存储在 HashMap<String,Object> 中

java - 仅当 Android 中的 HashMap 数据发生变化时才向服务器发送数据

java - HashMap中元素的检索顺序真的是随机的吗?

ruby-on-rails - Ruby 使用正则表达式替换散列键

来自异步线程的 Java 同步数据库管理器

java - 放大 Canvas 中的点,所有内容都基于某个点

java 使用计时器更改 JOptionPane 中 JTextArea 的内容

java - 致命异常 : main java. lang.ArrayIndexOutOfBoundsException:

java - 尝试将 hashmap getValue() 解析为 int 时出错