使用散列数据结构注意点
?
Goundhog自动继承基类Object,所以这里使用Object的hashCode()方法生成散列码,
而它默认是使用对象的地址计算散列码。所以查找不到。
?
可能你会认为,只需编写恰当的hashCode()方法的覆盖版本即可。但是它
任然无法正常运行,除非你同时覆盖equals()方法,它也是Object的一部分。
HashMap使用equals()判断当前键是否与表中存在的键相同。
正确的equals()方法必须满足下列5个条件:
1自反性对任意xx.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().