哈希码(也叫散列码)是一个整数值。计算整数的算法称为散列函数。Java使用散列码从基于散列的集合中有效地检索数据。Object
类有一个返回int
的hashCode()
方法,它是对象的哈希码。
该方法的默认实现通过将对象的内存地址转换为整数来计算对象的哈希码。下面是我们在类中重写hashCode()
方法时必须遵循的规则。
假设有两个对象引用,x
和y
。
如果x.equals(y)
返回true
,x.hashCode()
必须返回一个整数,它等于y.hashCode()
。
如果两个对象使用equals()
方法相等,则它们必须具有相同的哈希码。
如果x.hashCode()
等于y.hashCode()
,则x.equals(y)
不必返回true
。
如果对同一个对象多次调用hashCode()
方法,则该方法必须返回相同的整数值。
如果一个类覆盖这两个方法中的任何一个,它必须基于散列集合覆盖该类的对象以保证能正确工作。Java 7添加了一个实用程序类java.lang.Objects
。 它包含一个hash()
方法,用于计算任意数量值的哈希码。从java 7,使用Objects.hash()
方法来计算对象的哈希码。