哈希码的使用

来源:互联网 发布:2016淘宝怎么了 编辑:程序博客网 时间:2024/06/07 14:01

在java中,哈希码表示对象的特征。

public int hashCode()

返回对象的哈希码值。这种方法支持哈希表的好处比如提供的 HashMap.

一般的合同 hashCode是:

  • 无论何时调用不止一次在对同一对象的Java应用程序的执行 hashCode方法必须始终返回相同的整数,没有提供信息中使用 equals比较对象被修改。这个整数不需要保持一致从一个执行应用程序的另一个相同的应用程序的执行。
  • 如果两个对象是相等的根据 equals(Object)的方法,然后调用 hashCode方法的两个对象必须产生相同的整数的结果。
  • 它不是必需的,如果两个对象是不平等的根据 equals(java.lang.Object)的方法,然后调用 hashCode方法的两个对象必须产生不同的整数的结果。但是,程序员应该意识到生产不同的整数结果不平等的对象可能提高哈希表的性能。

是合理实用,hashCode方法定义的类 Object返回不同的整数为不同的对象。(这通常是实现对象的内部地址转换成一个整数,但这不是必需的实现技术,java编程语言)。

返回:

这个对象的哈希码值。

public boolean equals(Object obj)

显示一些其他对象是否“等于”。

 equals在非空对象引用方法实现一个等价关系:

  • 它是反射性:对于任何非空的参考值 x, x.equals(x)应该返回 true.
  • 它是对称的:对于任何非空引用值 x y, x.equals(y)应该返回 true当且仅当 y.equals(x)返回 true.
  • 这是传递:对于任何非空引用值 x, y, z,如果 x.equals(y)返回 true y.equals(z)返回 true,然后 x.equals(z)应该返回 true.
  • 它是一致的:对于任何非空引用值 x y,多次调用 x.equals(y)始终返回 true或持续回报 false没有提供信息中使用 equals比较对象被修改。
  • 对于任何非空的参考值 x, x.equals(null)应该返回 false.

 equals方法类 Object实现最歧视可能等价关系对象,也就是说,对于任何非空引用值 x y,那么该方法将返回 true当且仅当 x y引用同一个对象(x == y有价值 true).

注意,通常需要覆盖 hashCode方法当重写此方法,以维护的总承包合同 hashCode方法,即平等对象必须有平等的哈希码。

参数:
obj——比较的参考对象。
返回:
true如果这个对象obj参数相同; false否则。
hashCode的常规规定是:
在Java应用程序执行期间,在同一对象上多次调用hashCode方法时,必须一致地返回相同的整数,前提是对象上equals比较中所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
如果根据equals(Object)方法,两个对象是相等的,那么在两个对象中的每个对象上调用hashCode方法都必须生成相同的整数结果。
注明:
以下情况不 是必需的:如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么在两个对象中的任一对象上调用 hashCode 方法必定会生成不同的整数结果。但是,程序员应该知道,为不相等的对象生成不同整数结果可以提高哈希表的性能。

实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。) 当equals方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。


0 0