HashMap、HashSet是常用的容器,他们查找的快速性依赖散列表完成的,所以,如果要用对象去作为键,则必须去改写hashCode。通常,规范是如果两个对象的equals值相等,那么调用这两个对象中任一个对象的hashCode方法必须产生同样的整数结果。
在改写HashCode时,尽量选取非可变的域去生成hashCode,这样避免同一个对象产生不同的hashCode带来的困扰,特别是用HashMap这类的容器。
有时计算HashCode开销挺大,对于非可变的对象,可以选择“延迟初始化”,第一调用的时候才去计算hashCode,并且第一次计算后,将值保存,以后直接返回第一次计算的hashCode结果