15

当我们有equals(), compareTo()methods 为什么hashcode()在 Java 中有一个方法?

如果我们使用 HashTable我们必须覆盖hashcode()方法,除了快速访问随机键之外还有什么特殊原因吗?如果我们重写该hashcode()方法,可能的实现是什么?

Java如何确保对象在内存中的唯一性?


Hashcodes are typically used to enhance the performance of large collections of data.

hashing我们计算hash code. 这是一项额外的任务。当我们对添加到集合中的每个对象执行附加操作时。性能如何提高?

4

2 回答 2

13

您必须始终超越equalshashCode串联,以满足他们相互依存的合同。即使在最低软件工程标准下,矛盾地实现它们的类也完全被破坏和不可接受。

至于为什么要使用哈希表数据结构:因为它是随机访问键值存储的最快选择。

于 2013-08-06T11:25:44.130 回答
0

使用该compareTo方法为您的对象建立“总订单”。全序是一个相当弱的属性:它只能告诉您一个对象是否“小于”另一个对象,但它不会让您知道两个对象“相距多远”。

例如,如果您在键值数据结构中有 N 个对象,并且您想要查找给定键的值。只有一个总订单,您至少需要 O(log N) 比较才能找到匹配的键。

哈希码是一个更强大的属性,因为它可以告诉您两个对象是否有些相似或完全不同。多亏了这一点,哈希表可以通过 O(1) 操作找到键的值。

于 2013-08-06T11:26:20.857 回答