首页 > 解决方案 > 我需要一些关于带有 hashmap 的用户类型的建议

问题描述

我写的用户类型如下

class Item {
   int first;
   int second;

   public boolean equals(Item p) {
       if(first == p.first && second == p.second ) 
           return true;
       else if(first == p.second && second == p.first)
           return true;
       else
           return false;
   }
   public int hashcode() {
       return Objects.hash(first, second);
   }
   public void set(Object first, Object second) {
       this.first = Integer.parseInt(first.toString());
       this.second = Integer.parseInt(second.toString());
   }

}

但是,它根本不起作用。我是否错误地设计了重复测试?

标签: java

解决方案


一些微妙的问题:

  • equals 的签名必须是public boolean equals(Object o)(所以,是的,您需要与 Object 进行比较,而不是您的直接类)
  • 对于哈希码,它应该是hashCode(). 而且,ewuals() 认为相等的两个对象需要具有相同的 hashCode 值。您的实现没有实现。

真正的教训是:当你打算覆盖方法时,把@Override注解放在它上面,这样编译器就可以告诉你什么时候搞砸了。

在您的情况下,当您打算将您的类与包含的任何 java 集合(例如 Map/HashMap)一起使用时,您实现了两种方法都错误,而您需要正确处理。


推荐阅读