Java中hashCode的用途是什么?

问题

在Java中,obj.hashCode()返回了一些值。这个哈希码在编程中有什么用?


#1 热门回答(164 赞)

hashCode()用于阻止Hash实现,如HashMap,HashTable,HashSet等。

hashCode()接收的值用作用于存储集合/映射的元素的桶号。此桶号是set / map中元素的地址。

当你执行contains()it将获取元素的哈希码,然后查找哈希码指向的桶。如果在同一个桶中找到多于1个元素(多个对象可以具有相同的哈希码),则它使用equals()方法来评估对象是否相等,然后判断ifcontains()是true还是false,或者决定是否可以添加元素集合与否。


#2 热门回答(25 赞)

Javadoc

返回对象的哈希码值。支持此方法是为了哈希表的好处,例如由java.util.Hashtable提供的哈希表。

hashCode的总合同是:

  • 只要在执行Java应用程序期间多次在同一对象上调用它,hashCode方法必须始终返回相同的整数,前提是不修改在对象的equals比较中使用的信息。从应用程序的一次执行到同一应用程序的另一次执行,该整数不需要保持一致。
  • 如果两个对象根据equals(Object)方法相等,则对两个对象中的每个对象调用hashCode方法必须生成相同的整数结果。
  • 如果两个对象根据equals(java.lang.Object)方法不相等,则不需要在两个对象中的每一个上调用hashCode方法必须生成不同的整数结果。但是,程序员应该知道为不等对象生成不同的整数结果可能会提高哈希表的性能。

尽可能合理,Object类定义的hashCode方法确实为不同的对象返回不同的整数。 (这通常通过将对象的内部地址转换为整数来实现,但Java编程语言不需要此实现技术。)


#3 热门回答(7 赞)

虽然hashcode对你的业务逻辑没有任何作用,但在大多数情况下我们必须处理它。因为当你的对象放入基于散列的容器(HashSet,HashMap ...)时,容器会放置/获取元素的哈希码。