Goundhog自动继承基类Object,所以这里使用Object的hashCode()方法生成散列码,
而它默认是使用对象的地址计算散列码。所以查找不到。
可能你会认为,只需编写恰当的hashCode()方法的覆盖版本即可。但是它
任然无法正常运行,除非你同时覆盖equals()方法,它也是Object的一部分。
HashMap使用equals()判断当前键是否与表中存在的键相同。
正确的equals()方法必须满足下列5个条件:
1 自反性 对任意x x.equals(x) 一定返回true
2 对称性
3 传递性
4 一致性 对任意x和y,如果对象中用于等价比较的信息没有改变,
那么无论调用x.equals(y)多少次,返回的结果保持一致。
5 对任何不是null的x, x.equals(null)一定返回false;
再次强调,默认的Object.equals()只是比较对象的地址,所以一个Goundhog(3)
并不等于另一个Goundhog(3)。因此,如果要使用自己的类作为HashMap的类,
必须同时重载hashCode()和equals().