当我们有equals()
,compareTo()
方法时,为什么Java中有hashcode()
方法?
如果我们使用HashTable
,我们必须覆盖hashcode()
方法,除快速访问随机密钥外,有什么特殊原因吗?如果我们覆盖hashcode()
方法,可能的实现是什么?
Java如何确保内存中的对象唯一性?
Hashcodes are typically used to enhance the performance of large collections of data
。
在hashing
中,我们计算hash code
。这是一项额外的任务。当我们为添加到集合的每个对象执行其他操作时。性能如何提高?
答案 0 :(得分:12)
您必须始终同时覆盖equals
和hashCode
,以满足其相互依赖的合同。即使是最低限度的软件工程标准,一个反对实现它们的类也是简单的破坏和不可接受的。
至于为什么会使用哈希表数据结构:因为它是随机访问键值存储的最快选择。
答案 1 :(得分:2)
检查以下Link to understand why hashing is used
1:http://java.dzone.com/articles/java-hashing以及以下Link also wil help you.
答案 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()
。