12.2.Hashing的实现方法(1)
\(12.2\)\(Hashing\)的实现方法(1)
1.整数溢出
在先前将字符串转换为整数的操作中,我们忽略了一个问题:转换得到的整数过大导致溢出怎么办?例如,溢出后的melt banana
与subterresetrial anticosmetic
的\(Hash\)值是一样的,如果我们通过比较它们的\(Hash\)值来确定它们是否相等,会得到相反的答案。
整数的溢出是无法避免的,因为\(Java\)能够表示的最大整数只有\(2147483647\)。因此我们引入下面的方法:
2.\(Hash\;Codes\)
在\(Java\)中,每个对象都有一个默认的.hashcode()
方法。\(Java\)通过该对象在内存中的位置来得出它的\(hashCode\)。这个方法对每个独立的对象都会给出不重复的\(hashCode\)。
有时,我们也会自己定义.hashcode()
方法,来满足自己定义的一些类的需要。
\(hashCode\)具有如下性质:
- 它是一个整数
- 对同一对象多次调用
.hashcode()
,得到的结果都相同。 - 两个
.equal()
的对象必须具有相同的\(hashCode\)。
然而,并不是所有\(hashCode\)相等的对象都.equal()
,因此,我们应当让对象的\(.hashode()\)方法生成的\(hashCode\)尽可能分布均匀。
到此为止,我们实现了\(Hashing\)的普适性。