程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了等于和hashCode:Objects.hash方法是否损坏?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决等于和hashCode:Objects.hash方法是否损坏??

开发过程中遇到等于和hashCode:Objects.hash方法是否损坏?的问题如何解决?下面主要结合日常开发的经验,给出你关于等于和hashCode:Objects.hash方法是否损坏?的解决方法建议,希望对你解决等于和hashCode:Objects.hash方法是否损坏?有所启发或帮助;

实际上,您碰巧触发了纯粹的巧合。:)

Objects.hash碰巧是通过相继添加每个给定对象的哈希码,然后将结果乘以31来实现的,而String.hashCode对每个字符都执行相同的操作。碰巧的是,您所使用的“英语”字符串中的差异与字符串末尾的偏移量恰好比“ Chamorro”字符串中的差异大了一个偏移量,因此所有内容都可以完美抵消。恭喜你!

尝试其他字符串,您可能会发现它可以按预期工作。正如其他人已经指出的那样,严格来说,这种效果实际上并没有错,因为即使哈希码表示的对象不相等,哈希码也可能正确冲突。如果有的话,尝试找到一个更有效的哈希值可能是值得的,但我认为在现实情况下几乎没有必要。

解决方法

我正在使用Java
7,下面有下面的类。我实现equalshashCode正确的,但问题是,equals收益false的主要方法,下面又hashCode返回两个对象相同的散列码。我可以让更多的眼睛看着这个班级,看看我在这里做错了什么吗?

更新: 我更换了我称之为行Objects.hash方法用我自己的哈希函数:chamorro.hashCode() + english.hashCode() + notes.hashCode()。它返回一个不同的哈希码,这是hashCode当两个对象不同时应该执行的操作。是Objects.hash方法打破?

对你的帮助表示感谢!

import org.apache.commons.lang3.StringEscapeUtils;

public class ChamorroEntry {

  private String chamorro,english,notes;

  public ChamorroEntry(String chamorro,String english,String notes) {
    this.chamorro = StringEscapeUtils.unescapeHtml4(chamorro.trim());
    this.english = StringEscapeUtils.unescapeHtml4(english.trim());
    this.notes = notes.trim();
  }

  @Override
  public boolean equals(Object object) {
    if (!(object instanceof ChamorroEntry)) {
      return false;
    }
    if (this == object) {
      return true;
    }
    ChamorroEntry entry = (ChamorroEntry) object;
    return chamorro.equals(entry.chamorro) && english.equals(entry.english)
        && notes.equals(entry.notes);
  }

  @Override
  public int hashCode() {
    return java.util.Objects.hash(chamorro,notes);
  }

  public static void main(String... args) {
    ChamorroEntry entry1 = new ChamorroEntry("Åguigan","Second island south of Saipan. Åguihan.","");
    ChamorroEntry entry2 = new ChamorroEntry("Åguihan","Second island south of Saipan. Åguigan.","");
    System.err.println(entry1.equals(entry2)); // returns false
    System.err.println(entry1.hashCode() + "\n" + entry2.hashCode()); // returns same hash code!
  }
}

大佬总结

以上是大佬教程为你收集整理的等于和hashCode:Objects.hash方法是否损坏?全部内容,希望文章能够帮你解决等于和hashCode:Objects.hash方法是否损坏?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: