hashCode 方法
hashCode 是按照一定的算法得到的一个数值,是对象的散列码值。主要用来在集合(后
面会学到)中实现快速查找等操作,也可以用于对象的比较。
在 Java 中,对 hashCode 的规定如下: (1):在同一个应用程序执行期间,对同一个对象调用 hashCode(),必须返回相同的整
数结果——前提是 equals()所比较的信息都不曾被改动过。至于同一个应用程序在不同执
行期所得的调用结果,无需一致。
(2):如果两个对象被 equals(Object)方法视为相等,那么对这两个对象调用 hashCode
()必须获得相同的整数结果。
(3):如果两个对象被 equals(Object)
方法视为不相等,那么对
这两个对象调用 hashC
ode()不必产生不同的整数结果。然而程序员应该意识到,对不同对象产生不同的整数结
果,有可能提升 hashTable(后面会学到,集合框架中的一个类) 的效率。
简单地说:如果两个对象相同,那么它们的 hashCode 值一定要相同;如果两个对象的
hashCode 相同,它们并不一定相同。
在 Java 规范里面规定,覆盖 equals 方法应该连带覆盖 hashCode 方法,这就涉及到一个
如何实现 hashCode 方法的问题了。
实现一:偷懒的做法:对同一对象始终返回相同的hashCode,如下:
public int hashCode(){ return 1;
}
它是合法的,但是不好,因为每个对象具有相同的 hashCode,会使得很多使用 hashCode
的类的运行效率大大降低,甚至发生错误。