12.2.Hashing的实现方法(1)

\(12.2\)\(Hashing\)的实现方法(1)

1.整数溢出

  在先前将字符串转换为整数的操作中,我们忽略了一个问题:转换得到的整数过大导致溢出怎么办?例如,溢出后的melt bananasubterresetrial anticosmetic\(Hash\)值是一样的,如果我们通过比较它们的\(Hash\)值来确定它们是否相等,会得到相反的答案。

  整数的溢出是无法避免的,因为\(Java\)能够表示的最大整数只有\(2147483647\)。因此我们引入下面的方法:

2.\(Hash\;Codes\)

  在\(Java\)中,每个对象都有一个默认的.hashcode()方法。\(Java\)通过该对象在内存中的位置来得出它的\(hashCode\)。这个方法对每个独立的对象都会给出不重复的\(hashCode\)

  有时,我们也会自己定义.hashcode()方法,来满足自己定义的一些类的需要。

  \(hashCode\)具有如下性质:

  1. 它是一个整数
  2. 对同一对象多次调用.hashcode(),得到的结果都相同。
  3. 两个.equal() 的对象必须具有相同的\(hashCode\)

  然而,并不是所有\(hashCode\)相等的对象都.equal(),因此,我们应当让对象的\(.hashode()\)方法生成的\(hashCode\)尽可能分布均匀。

  到此为止,我们实现了\(Hashing\)的普适性。