检查hashCode()是否相等是实现equals(Object obj)的有效方法? - java

我的hashCode方法确保相等的对象具有相等的哈希码。我的实现还保证了相反的说法是正确的,因为相等的哈希码表示对象相等。做类似的事情:

   @Override
    public boolean equals(Object obj) {
        if (this == obj) {return true;}
        if (obj == null) {return false;}
        if (getClass() != obj.getClass()) {return false;}
        return (obj.hashCode() == this.hashCode());
    }

似乎是一个显而易见的选择,但我很少看到这种情况。这对我来说是个好主意,还是我错过了什么?

另外,我不确定这是否相关,但是hashCodeequals方法在生成的类中(显然是自己生成的)。我之所以这样说,是为了强调这样一个事实,即每个发言都不会手动维护这些方法。它们属于在编译时创建的类,除非它们基于更改的架构,否则不得更改。

java大神给出的解决方案

如问题所述,如果您的hashCode实现确实确保不相等的对象具有不相等的哈希码,则原则上您的操作没有任何问题。您的equals方法正在检查等同于相等性的属性,因此行为符合预期。不过,您应该重新检查该保证;请记住,无论您多么聪明,您都只能将32位信息存储在一个int中,这意味着大多数非平凡的对象必然会具有哈希菌。

但是,有一些警告。首先要明确:如果您以这种方式实现equals,那么使用您的代码的任何人都必须查看您的hashCode实现,以找出哪些属性确定相等性。其次是速度:如果您的哈希码实现比仅检查相关属性的相等性(包括该计算中的布尔快捷方式)要慢得多,那么可能有必要在equals函数中重新实现逻辑以避免速度损失。第三是耦合:以这种方式实现equals意味着它取决于hashCode的属性,将来对hashCode所做的任何更改都必须保留该属性或将逻辑移到equals中。

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…

从方法返回数组-Java - java

private static Coordinate[] getCircleCoordintaes() { Coordinate coordinates[] = {new Coordinate(0, 0)}; return coordinates; } 以上程序工作正常。在上面的程序中,返回的坐标数组首先初始化了数组使用这条线Coordinate coordi…

Java Swing SearchBox模型 - java

我需要使用Java Swing的搜索框,如果单击任何建议,当输入字母时它将显示来自数据库的建议,它将执行一些操作。如果有可能在Java swing中,请提供源代码提前致谢 java大神给出的解决方案 您可以使用DefaultComboBoxModel,输出将是这样。Try this在此代码中,您将找到countries数组,因此您需要从数据库中获取此数组。

JAVA:如何检查对象数组中的所有对象是否都是子类的对象? - java

我有一个对象数组。现在,我要检查所有这些对象是否都是MyObject的实例。有没有比这更好的选择:boolean check = true; for (Object o : justAList){ if (!(o instanceof MyObject)){ check = false; break; } } java大神给出的解决方案 如果您不喜欢循环,则…