【问题标题】:Override Equals for Hashmap<String,String>覆盖 Hashmap<String,String> 的等于
【发布时间】:2014-04-07 05:51:24
【问题描述】:

我有Hashmap,如何覆盖hashmap的equals方法?

谢谢。

【问题讨论】:

  • HashMap 已经有一个equals() 方法。为非您创建的类编写 equals() 方法不是您的责任。
  • 你为什么要这样做?如果你真的需要,你需要扩展它并覆盖 equals - 但是为什么?
  • 您可以在子类化时覆盖类的方法。但是为什么要改变HashMap的equals行为呢?
  • @Seelenvirtuose 我需要检查以下内容 1)第一个地图中存在的所有键是否也存在于第二个地图中 2)如果第一个满足我还需要检查它们的键是否具有相同的值在两张地图中。注意:这里的 hashmap
  • @Pradheep:这将违反 equals() 合同,因此不是 equals() 方法的工作:[a=b] 不能等于 [a=b, c =d],即使这符合您对“相等”的定义。如果两个映射都具有与相等值关联的相等键,则默认 equals 方法返回 trus。

标签: java overriding equals


【解决方案1】:

如果你愿意,你可以这样做:

HashMap<String, String> map = new HashMap<String, String>(){
    @Override
    public boolean equals(Object o) {
        // TODO comparison here
        return super.equals(o);
    }
};
map.equals(new HashMap<String, String>());

【讨论】:

    【解决方案2】:

    在HashMap中已经重写了equals()方法。如果你想重写对象类equals() 方法eclipse快捷键--->alt+shift+s+v

    选择equals方法点击ok。

    【讨论】:

      【解决方案3】:

      你需要自己创建一个扩展 Hashmap 的类

      public class NewHashMap<K,V> extends HashMap<K, V>
      

      并覆盖其中的equals方法

      @Override
      public boolean equals(Object o) {
          // Your code
      }
      

      祝你好运

      【讨论】:

        【解决方案4】:

        或者更好的是,在某个地方创建一个单独的方法来比较您想要的特定哈希图。例如:

        public class HashMapComparator {
            boolean static areMapsEqual(HashMap<String, String> aMap, HashMap<String, String> bMap) {
                ....
            }
        }
        

        然后使用它:

        boolean mapsAreEqual = HashMapComparator.areMapsEqual(firstMap, secondMap);
        

        虽然你应该知道这是一个不正确的解决方案,以防你想在搜索或排序这些 HashMap 的列表时使用 equals 方法。我假设情况并非如此。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-11-13
          • 2022-06-14
          • 1970-01-01
          • 1970-01-01
          • 2011-04-07
          • 2013-07-29
          • 2021-12-12
          相关资源
          最近更新 更多