java - 如何按值比较两个 map

标签 java dictionary collections compare equals

如何根据值比较两个 map ?我有两个包含相等值的 map ,想通过它们的值来比较它们。这是一个例子:

    Map a = new HashMap();
    a.put("foo", "bar"+"bar");
    a.put("zoo", "bar"+"bar");

    Map b = new HashMap();
    b.put(new String("foo"), "bar"+"bar");
    b.put(new String("zoo"), "bar"+"bar");

    System.out.println("equals: " + a.equals(b));            // obviously false

我应该如何更改代码以获得 true?

最佳答案

比较值(value)平等 map 的正确方法是:

  1. 检查 map 大小是否相同(!)
  2. 从一张 map 中获取一组
  3. 对于您检索到的那个集合中的每个键,检查从该键的每个映射中检索到的值是否相同(如果一个映射中不存在该键,则完全不相等)

换句话说(减去错误处理):

boolean equalMaps(Map<K,V>m1, Map<K,V>m2) {
   if (m1.size() != m2.size())
      return false;
   for (K key: m1.keySet())
      if (!m1.get(key).equals(m2.get(key)))
         return false;
   return true;
}

关于java - 如何按值比较两个 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2674021/

相关文章:

c# - 需要帮助为三个值实现某种列表

python - 使用 numpy.savez() 保存标题信息字典

java - 为什么 java.util.Set 没有 get(int index)?

java - Java 中 html 文本代码的正则表达式

Java 和 HID 通信

python - 更新字典中特定位置的所有值

ios - 使用 Class/Struct in collection Cell inside collection Cell for future pass data

kotlin - 可变和不可变集合类是同一个 kotlin

java - 如何从未排序的 x/y 坐标数组中查找直线

java - LinkedBlockingQueue - java - 队列已满