java中hashcode方法的目的是什么?

时间:2013-08-06 11:19:48

标签: java hashcode

当我们有equals()compareTo()方法时,为什么Java中有hashcode()方法?

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

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


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

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

4 个答案:

答案 0 :(得分:12)

您必须始终同时覆盖equalshashCode,以满足其相互依赖的合同。即使是最低限度的软件工程标准,一个反对实现它们的类也是简单的破坏和不可接受的。

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

答案 1 :(得分:2)

答案 2 :(得分:1)

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

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

哈希代码是一种更强大的属性,因为它可以告诉您两个对象是否有些相似或完全不同。由于这个原因,哈希表可以找到具有O(1)操作的键的值。

答案 3 :(得分:-5)

why there is a hashcode() method in Java?

基本上每当我们插入一个唯一的数据结构时,数据结构就确保没有插入重复的对象。怎么做?
这是通过对象正在实现的契约来完成的,hashcode()该唯一ID是一个人的SSN。但是如果你想要检索一个特定的对象然后猜测匹配SSN后应该调用什么,是的,你猜对了equals()