Java 哈希表中自定义键的实现

Java 哈希表中自定义键的实现,java,Java,如果我们在哈希表中实现自己的键,那么我们的自定义哈希表键必须实现 public int hashCode() { } 及 这些方法的实现方式是什么?通过阅读理解后,您可以使用commons lang来实现它。如果零件不是性能关键型零件,您甚至可以使用以下参照方法: public boolean equals(Object obj) { return EqualsBuilder.reflectionEquals(this, obj); } public int hashCode()

如果我们在哈希表中实现自己的键,那么我们的自定义哈希表键必须实现

public int hashCode()
{
}


这些方法的实现方式是什么?

通过阅读理解后,您可以使用commons lang来实现它。如果零件不是性能关键型零件,您甚至可以使用以下参照方法:

 public boolean equals(Object obj) {
   return EqualsBuilder.reflectionEquals(this, obj);
 }


public int hashCode() {
   return HashCodeBuilder.reflectionHashCode(this);
 }

这并不容易:)

这些方法用于哈希表实现,以在插入和检索时识别元素

  • hashcode是存储数据的关键
  • 等于用于检查键的方法contains、get等

  • 非常感谢您启发meI真正喜欢EqualsBuilder和HashCodeBuilder类,尽管我通常会因为性能问题而避免使用反射方法。@harmanjd:是的,如果它对性能至关重要,您应该避免使用,但大多数情况下不是这样。例如,如果使用hibernate,则在更新数据库之前,它严重依赖反射来查找对象之间的差异。如果在之后执行10或100毫秒的数据库操作,那么比较对象与反射的2纳秒时间是微不足道的。非常感谢你给我的启发。看看dfa的帖子。他提供了指向有效Java的确切章节的链接。我最后的两个链接有点旧了。第一个很好,“public Object equals(Object obj)”必须读为“public boolean equals(Object obj)”。
     public boolean equals(Object obj) {
       return EqualsBuilder.reflectionEquals(this, obj);
     }
    
    
    public int hashCode() {
       return HashCodeBuilder.reflectionHashCode(this);
     }