【问题标题】:What's the difference between the return of hashCode() and a key in a hashTable?hashCode() 的返回值和 hashTable 中的键有什么区别?
【发布时间】:2017-08-05 10:32:08
【问题描述】:

我必须为家庭作业编写一个完美的哈希表,但我很难理解:

hashCode() 的返回值和 hashTable 中的键有什么区别,因为我必须实现 getKey() 方法,但我只知道对象 x 的索引由 ((a * x.hashCode () + b) mod p) mod m 当 a 和 b 是随机整数,pa 是素数,m 是表的大小。

由于索引由 H(key) 给出,这意味着 x.hashCode() 在我看来是 key,但我不确定,因为 key 和 value(仅整数)是相同的。

【问题讨论】:

  • 两个键可以有相同的哈希码但不相等。
  • key是key类型的对象。哈希码不是键,它是与键关联的数字。

标签: java hash hashtable hashcode


【解决方案1】:

hashcode() 方法产生将对象的散列方法应用于特定实例的预期结果,而关键是对象本身。

请记住,对象可以是另一个复杂/复合对象(比如另一个 HashMap)。只要它有一个合理的实现 hashcode()equals() ,它就可以正常工作。

如果两个实例产生相同的hashcode() 结果并且equals() 根据该结果进行比较(撇开类型检查,但它们当然也是测试的一部分),则对象被视为相等/相同.

一旦您开始使用 TreeMap,这会变得非常有趣(其中相等性不是基于哈希码/相等性,而是基于排序,Comparables 和 Comparators)

【讨论】:

  • 这就是为什么equalshashCodecompareTo(如果使用)必须保持一致很重要。理想情况下,toString 也是如此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
  • 2011-09-29
  • 2015-11-17
  • 2011-12-24
相关资源
最近更新 更多